У меня возникла следующая проблема:
Я хочу перенаправить неканонический 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
должно быть перенаправлено на
Кто-нибудь знает, в чем проблема?Спасибо
Проблема заключается в том, что сначала необходимо выполнить внешнее перенаправление, но в настоящее время оно фактически происходит после последнего блока правил.Добавление флага L для принудительного немедленного перенаправления решит вашу проблему:
L
RewriteRule .* http://www.example.com/$0 [R=301,L]
Без флага URL-адрес будет снова преобразован вторым блоком правил до того, как произойдет перенаправлениеВот почему вы получаете неожиданное поведение.