.htaccess цикл перенаправления, когда Redirect и RewriteRule вместе - PullRequest
3 голосов
/ 02 февраля 2012

Я пытаюсь выполнить следующее в файле HTACCESS:

Я хочу 301 перенаправить это -> http://www.domain.com/somepage.php?page=foo

на это -> http://www.domain.com/my-pretty-url/

Это прекрасно работает, когда я изменяю внутренние ссылки на сайте, чтобы прочитать, как я хочу, и я НЕ использую флаг R = 301:

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]

НО ... заминка здесь я тоже хочу301 Перенаправить любые внешние запросы на сервер, который, когда я обрабатываю это, помещает меня в цикл перенаправления.

RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^page=foo$
RewriteRule ^.*$ http://www.domain.com/my-pretty-url/? [R=301,L]

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]

Правила RewriteCond не работают сами по себе, только один RewriteRule внизу работаетсам для внутренних переписываний, но он не обрабатывает внешние запросы.

Очевидно, что если у меня есть оба вместе, это создает цикл.Как мне обойти это ??

Спасибо!

1 Ответ

4 голосов
/ 02 февраля 2012

Попробуйте следующее, чтобы предотвратить зацикливание

#prevent internal redirects, and prevent loop
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{REQUEST_URI} /index.php$
RewriteCond %{QUERY_STRING} ^page=foo$
RewriteRule ^.*$ http://www.domain.com/my-pretty-url/? [R=301,L]

RewriteRule ^my-pretty-url/$ /index\.php?page=foo [L]
...