Если вы хотите перенаправить /page.php?user=<username>
на /<username>
, где <username>
- это последовательность символов az или AZ, попробуйте что-то вроде следующего в верхней части файла .htaccess
:
Options -MultiViews
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^user=([a-zA-Z]+)
RewriteRule ^page\.php$ /%1? [R=302,L]
Просто чтобы уточнить, это только для удовлетворения поисковых систем, которые, возможно, уже проиндексировали старый URL-адрес или когда внешние сайты ссылались на него. URL-адреса в вашем приложении уже ссылаются непосредственно на /<username>
.
%1
- это обратная ссылка на захваченную группу в последней совпавшей CondPattern . Проверка по переменной REDIRECT_STATUS
должна гарантировать, что мы проверяем только первоначальный запрос, а не переписанный запрос.
Измените на 301 только после того, как вы проверили, что он работает нормально.
Затем вы можете следовать этому правилу, которое внутренне переписывает запрос обратно на /page.php?user=<username>
. Хотя флаг NC
в вашей директиве не нужен. Как происходит проверка существующего файла (и, возможно, каталога?), Если у вас нет файлов без расширения? И вам не нужно избегать точки в классе персонажей. Таким образом, его можно упростить до:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ /page.php?user=$1 [L]