Имя пользователя как часть 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');