我正在运行CentOS 6.0,并试图使mod_rewrite从任何URL前缀删除www。 以下是我在httpd.conf中的代码:
注意:我正在使用具有完全根访问权限的VPS,所以我没有使用.htaccess文件或任何“每个目录”设置。
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$ RewriteRule ^(.*)$ http://aaronjwood.com/$1 [R=301,L]
这对所有页面都是正常工作的,只不过url会写入http://aaronjwood.com// (注意两个斜线)或http://aaronjwood.com//contact.php 。 任何人都可以帮我找出为什么发生这种情况?
由于它位于主configuration文件中,而不是每个目录( <Directory>或.htaccess ),因此前导斜杠不会被上下文剥离。 它实际上是添加(或者试图添加 – 不确定Apache是否在大多数情况下删除额外的内容,或者客户端浏览器是否)是每次重写的第二个斜杠。
只要说明这个事实,就是你所匹配的string中包含了前导斜杠:
RewriteRule ^/(.*)$ http://aaronjwood.com/$1 [R=301,L]
由于它直接在虚拟主机中,因此解决方法如下:删除斜线: http://aaronjwood.com$1
另一个提示:单独使用时, ^(.*)$与(.*)相同。
所以这里是解决scheme:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$ RewriteRule (.*) http://aaronjwood.com$1 [R=301,L]
请告诉我,如果它的工作。
奥利维尔