mod_rewrite和双斜杠问题

时间:2010-11-24 19:52:49

标签: apache mod-rewrite configuration

我在mod_rewrite中应用了以下Apache2规则,将非www重定向到www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

我有两个问题:

1)有一个双斜线问题:

有任何解决方法吗?

2)我的配置是否适合SEO?

5 个答案:

答案 0 :(得分:33)

修正:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301,L]

因为$1默认包含索引路径/

答案 1 :(得分:19)

RewriteRule ^\/?(.*)$ http://www.mydomain.com/$1 [R=301,L]

答案 2 :(得分:6)

实际上,由于

,你总是会有双斜线

RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

结合REQUEST_URI(您正在匹配)的事实通常包含起始斜杠。您可以尝试RewriteRule ^(.*)$ http://mydomain.com$1,然后发送一个损坏的HTTP请求GET foo HTTP/1.0,看看Apache是​​否正确处理它。

答案 3 :(得分:2)

在模式中加入斜杠可以解决此问题:

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]

答案 4 :(得分:1)

这是因为根路径是/,并且你要追加RewriteRule中的任何内容(第一种情况正常,因为匹配条件所以不进行重写。)

您可以尝试这样的事情:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
# for the home page
RewriteRule ^/$ http://www.mydomain.com/ [R=301,L]
# for the rest of pages
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]