Имя пользователя как часть URL вместо строки запроса

Извините, если вопрос уже задавался ранее, но я не нашел ничего актуального.

Я создаю приложение на одну страницу.

Что мне нужно, это установить имя пользователя как часть URL вместо использования строки запроса. На данный момент у меня есть следующая структура:

http://www.mypageurl.com/?user=username

Поэтому я получаю имя пользователя из запроса, а затем извлекаю все данные, относящиеся к этому пользователю.

Что мне нужно быть:

http://www.mypageurl.com/username

Как можно установить следующую структуру только на стороне клиента? Я не использую никаких библиотек (только jquery).

Спасибо!

3 ответа

Только на стороне клиента это невозможно, ваш новый URL делает его похожим на /username - это папка, которой у сервера нет (я предполагаю). Это может быть выполнимо, если вы написали пользовательский.htaccess и некоторый код на стороне сервера для обхода имени папки и обработки ответов оттуда, но что касается чисто клиентской стороны, это просто невозможно.

На тот случай, если мы полностью упустили то, что вы хотите выполнить, и ищите только скрипт перенаправления, и у вас действительно есть структура папок для каждого пользователя, тогда достаточно просто удалить значение запроса и выполнить перенаправление:

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

window.location.replace("http://example.com/"+getParameterByName('user'));

Так. Я узнал, как это сделать.

Может быть, кому-то это понадобится, поэтому я поделюсь этим с вами.

Как я уже сказал, это нужно делать только на стороне клиента. Итак, что я сделал: я изменил файл.htaccess, теперь это выглядит так:

<IfModule mod_rewrite.c>
RewriteEngine One
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

А потом, очень просто. С помощью JavaScript я делаю следующее:

var user=location.pathname.split('/')[3]

Вот и все. Очень просто. Спасибо всем, кто пытался помочь.

Если вы используете какой-либо вид маршрутизации в Backend. Он должен быть настроен для ответа на этот запрос, если другой маршрут не соответствует. В основном, если имя пользователя не существует в базе данных, оно должно выдать ошибку 404.

а на стороне клиента вы можете использовать push-состояние HTML 5.

history.pushState(null, 'New title of page', 'Username');
Другие вопросы по тегам