2015-11-15 41 views
3

我正在写一个WWW到非www重定向用下面的代码:WWW到非www重定向将不起作用

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

然而,www.mywebsite.com重定向到mywebsite.com/www/而不是mywebsite.com

我怀疑这可能是由于VirtualHost的DocumentRoot配置造成的,但由于我处于共享环境中,所以无法访问httpd.conf文件。

任何想法?

+1

请求的完整URL是什么?这个.htaccess文件大概在文档根目录下? – MrWhite

+0

规则应该按原样运行。所描述的行为只有在您请求“http:// www.mywebsite.com/www”时才会发生。最有可能的是,你的配置中还有更多。 –

+0

@ w3d:完整的URL是'http:// www.mywebsite.com'。谢谢 – Matthew

回答

1

由于奥拉夫在评论中建议,通常这不应该发生。然而,也出现了这样的一些问题,其中托管帐户(在共享环境中)在某种程度上依赖于配置并启用mod_rewrite的继承解决此问题:

RewriteOptions Inherit 

诚然,如何或为何这工作应该有点神秘。 (特别是由于上级指令执行后孩子指令,等等?)

您也可以尝试改变你的RewriteRule使用的REQUEST_URI值代替,例如:

RewriteRule^http://%1%{REQUEST_URI} [R=302,L] 

更改为301时你确定它工作正常。永久重定向自然会被浏览器缓存,因此可能会使测试变得棘手。 (另外,在测试之前清除浏览器缓存!)

+0

感谢您的回答。根据你的建议进一步调查,我发现RewriteRule的状况正在造成麻烦。使用'RewriteRule^http://%1/$ 1 [R = 302]'或者'RewriteRule^http://%1%{REQUEST_URI} [R = 302]',事情可以正常工作,尽管'www.mywebsite .com /东西'不会重定向到'mywebsite.com/something'。 – Matthew

+0

需要注意的是,如果你使用的是模式'^',那么'RewriteRule^http://%1/$ 1 [R = 302]'不会**工作,它需要是带有'REQUEST_URI'的第二个指令。 '。第一条指令会简单地去掉URL路径,所以不需要“www” - 但是没有_anything_!!然而,你是说第二个人不能工作......你还在失去“东西”吗?顺便提一句,你应该使用'L'标志(如果你有其他指令)。 – MrWhite

+0

你的.htaccess文件中是否有其他指令? – MrWhite