我在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?
答案 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]