Как настроить htaccess для получения параметров из удобного для пользователя URL-адреса для использования с JS

Я хотел бы, чтобы пользователи видели этот красивый URL:

www.example.com/michael

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

www.example.com?user=michael

На стороне JavaScript я тестирую это с этим:

var userId = getQueryString('user');
console.log("user="+userId);

На стороне .htaccess я использую это:

RewriteEngine On
RewriteRule ^([^/]*)$ ?user=$1 [L]

Когда я загружаю "www.example.com/michael", я не получаю перенаправление на 404, что хорошо. Но консоль выводит "user=null". Он не получает параметр через GET. Что я делаю неправильно?

1 ответ

В вашем .htaccessнапишите следующий код:

RewriteEngine On
RewriteRule ^([A-Za-z0-9])/?$ /index.php?user=$1 [NC,L]

Таким образом, вы можете получить доступ к вашему сайту, набрав www.example.com/michael или же www.example.com/michael/ или даже www.example.com/MICHAEL

Если вы хотите получить user параметр в JavaScript, используйте код ниже:

const urlParams = new URLSearchParams(window.location.search);
const username = urlParams.get('user');

Но помните, что JavaScript не будет определять параметр user если вы используете Rewrite режим, потому что с точки зрения браузера, URL является "/michael", а не "/?user=michael". JavaScript только смотрит на дружественный путь.

Вместо этого вы можете использовать перенаправление, поэтому, когда кто-то получает доступ к вводу "/michael", вы перенаправляете пользователя на "/? User = michael".

РЕДАКТИРОВАТЬ: Другое решение состоит в том, чтобы проанализировать весь URL, перехватывая первый блок "/" URL www.example.com/michael, Например:

var username = location.href.substring(location.protocol.length).substr(2).substring(location.href.substring(location.protocol.length).substr(2).indexOf('/') + 1);

Надеюсь, это поможет вам!

Другие вопросы по тегам