#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 .