У меня есть этот 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-адреса остается, и если я вернусь на другую страницу, меня будут перенаправлять на ту же страницу до тех пор, пока сервер выйдет из строя.

Если вы хотите преобразовать перенаправить/page.php?user=<username> в /<username>, где <username> - это последовательность символов a-z или A-Z, попробуйте что-то вроде следующего в верхней части файла .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]
Я обновил свой ответ, чтобы отключить MultiViews (с учетом вашего обновленного образца кода).
Если я использую первое решение, берет только первые две буквы user. Со вторым продолжаем редирект.
Я действительно представил только одно решение. Эти два фрагмента кода следует использовать вместе. Какой формат принимает имя пользователя? Вышеупомянутое предполагает только буквы, как в вашем примере. Только если имя пользователя содержит не-альфа-символы, потребуется меньше, чем полное имя пользователя. Блок правил не является «перенаправлением», поэтому, если вы видите перенаправление, возможно, вы видите кешированный ответ или, возможно, существует конфликт с существующими директивами?
Мне не удалось изменить регулярное выражение! Теперь все работает правильно! Большое спасибо!!
Вы только что изменили пример кода. Но ваша первая версия выглядела правильно, в соответствии с вашими примерами URL-адресов? Кроме того, есть ли у вас какие-либо другие директивы в вашем файле
.htaccess? Порядок важен. Если ваши URL-адреса действительно имеют форму/page/<username>/(как предлагает обновленный код), вам необходимо убедиться, чтоMultiViewsтакже отключен.