Apache规范网址301重定向和友好的网址重写问题

时间:2010-11-10 14:27:48

标签: mod-rewrite redirect apache2

我有以下问题:

我想将一个非规范网址重定向到规范网址,但要保留友好网址重写。

在我的.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

有人知道问题出在哪里?谢谢

1 个答案:

答案 0 :(得分:0)

问题在于需要首先执行外部重定向,但实际上它实际上是在最后一个规则块之后执行的。添加L flag以强制立即重定向将解决您的问题:

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

如果没有该标志,在重定向发生之前,第二个规则块将再次转换URL,这就是您遇到意外行为的原因。