Удалить часть URL, которая содержит параметр - PullRequest
0 голосов
/ 31 августа 2018

У меня есть этот URL:

https://www.example.it/page.php?user=Pippo

Результат, который я должен получить:

https://www.example.it/Pippo

Я пытаюсь с этим кодом:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/(.*)/$ /page.php?user=$1 [L]

Но часть URL остается, и если я возвращаюсь на другую страницу, я продолжаю перенаправляться на ту же страницу до тех пор, пока происходит сбой сервера.

1 Ответ

0 голосов
/ 31 августа 2018

Если вы хотите перенаправить /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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...