Apache canonical url 301 с редиректом и дружественной переписыванием URL - PullRequest
0 голосов
/ 10 ноября 2010

У меня возникла следующая проблема:

Я хочу перенаправить неканонический URL-адрес на канонический, но после переписывания дружественного URL-адреса.

В моем .htaccess у меня есть следующее:


RewriteEngine On

#Protect some directories
RewriteRule ^(system|modules|application) - [F,L]

#Force Using Canonical Name
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule .* http://www.example.com/$0 [R=301]

#Friendly url rewriting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?route=$0 [QSA,L]

У меня нет проблем с этим адресом:

http://www.example.com/articles/10/this-is-a-sample-post.html

Но когда я пытаюсь получить доступ к тому же URL-адресу без "www."часть, это перенаправлено на:

http://www.example.com/index.php?route=articles/10/this-is-a-sample-post.html

Другими словами,

http://example.com/articles/10/this-is-a-sample-post.html

должно быть перенаправлено на

http://www.example.com/articles/10/this-is-a-sample-post.html

Кто-нибудь знает, в чем проблема?Спасибо

1 Ответ

0 голосов
/ 10 ноября 2010

Проблема заключается в том, что сначала необходимо выполнить внешнее перенаправление, но в настоящее время оно фактически происходит после последнего блока правил.Добавление флага L для принудительного немедленного перенаправления решит вашу проблему:

RewriteRule .* http://www.example.com/$0 [R=301,L]

Без флага URL-адрес будет снова преобразован вторым блоком правил до того, как произойдет перенаправлениеВот почему вы получаете неожиданное поведение.

...