.htaccess редирект 301 с использованием правила перезаписи - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь украсить некоторые 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]

Обновление:

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

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

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

1 Ответ

1 голос
/ 27 мая 2011

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

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

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{THE_REQUEST} ^GET\s/+index\.php [NC]
RewriteCond %{QUERY_STRING} (^|&|\?)id=(.*)(&|$) [NC]
RewriteRule . /%2? [R=301,L,NC]

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

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

...