我有以下问题:
我想将一个非规范网址重定向到规范网址,但要保留友好网址重写。
在我的.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
但是当我尝试访问没有“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
有人知道问题出在哪里?谢谢
答案 0 :(得分:0)
问题在于需要首先执行外部重定向,但实际上它实际上是在最后一个规则块之后执行的。添加L
flag以强制立即重定向将解决您的问题:
RewriteRule .* http://www.example.com/$0 [R=301,L]
如果没有该标志,在重定向发生之前,第二个规则块将再次转换URL,这就是您遇到意外行为的原因。