перенаправление .htaccess 301 с использованием правила перезаписи

#apache #.htaccess #mod-rewrite #redirect #url-rewriting

#apache #.htaccess #мод-перезапись #перенаправление #url-переписывание

Вопрос:

Я пытаюсь украсить некоторые URL-адреса. Я настроил файл htaccess, поэтому мои URL-адреса изменены:

старый URL: http://mysite.com/index.php?id=45tye4 новый URL: http://mysite.com/45tye4

Теперь я хочу постоянно перенаправлять старые URL-адреса на новые URL-адреса. Это то, что я пытаюсь, но безуспешно:

 RewriteRule ^index.php?id=(.*)$ $1 [R=301,L]
  

Похоже, основная проблема заключается в ‘?’ в URL. Когда я пытаюсь использовать тот же URL без? перенаправление работает. Я также пробовал другие варианты, но безуспешно:

 RewriteRule ^index.php?id=(.*)$ $1 [R=301,L]
RewriteRule ^index.php[?]id=(.*)$ $1 [R=301,L]
  

Обновить:

Я добавил перенаправление в соответствии с инструкциями anubhava. Перенаправление работает, но, к сожалению, я попадаю в цикл перенаправления. Я думал, что флаг [L] должен разрешить цикл перенаправления, но это не так.

 RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^index.php/?$ /%1? [R=301,L] 

RewriteRule ^(.*)$ index.php?id=$1 [L]
  

Ответ №1:

RewriteRule соответствует только REQUEST_URI. Вы должны использовать RewriteCond для сопоставления строки запроса

Попробуйте этот код:

 Options  FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^GETs/ index.php [NC]
RewriteCond %{QUERY_STRING} (^|amp;|?)id=(.*)(amp;|$) [NC]
RewriteRule . /%2? [R=301,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(. )$ index.php?id=$1 [L]
  

Это перенаправит старый URI /index.php?id=45tye4 на новый URI: /45tye4

Комментарии:

1. Перенаправление работает, но, к сожалению, я попадаю в цикл перенаправления. Я думал, что флаг [L] должен разрешить цикл перенаправления, но это не так.

2. Произошла незначительная опечатка, отредактировал ответ. Пожалуйста, проверьте еще раз.

3. Я добавил обновленный, но все равно получаю проблему с циклом перенаправления. Я не понимаю, разве [L] flag не должен этого избегать?

4. Я не заметил ваш код в разделе РЕДАКТИРОВАНИЯ ранее. Исходя из этого, мне пришлось изменить свой ответ. Я протестировал их, и это работает нормально. Пожалуйста, проверьте.

5. Я обновил его соответствующим образом, все еще не работает. Цикл перенаправления нарушен, но перенаправление 301 не работает. По какой-то странной причине условие THE_REQUEST неверно для URL типа mysite.com/index.php?id=465 .