.htaccess重写www到非www重定向问题

时间:2012-12-14 06:25:31

标签: .htaccess mod-rewrite redirect rewrite no-www

所以我一直试图让这个重定向代码现在工作几个小时,这让我发疯了。我有相反的方向(非www到www)使用此代码:

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

我在这里找到了上面的代码: https://stackoverflow.com/questions/3013730/redirecting-non-www-to-www

我必须从第三行代码中删除 $ 1 才能使其正常工作:

RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

我需要 www.example.com 重定向到 example.com

并且 www.example.com 上的每个网页都会重定向到完全相同的网址,减去 www

www.example.com/test --->的 example.com/test

www.example.com/begin.php --->的 example.com/begin.php

等等。由于我让最顶层的代码部分朝着相反的方向工作,我认为只需切换一些东西并让它在几分钟内工作就很容易了,但我总是遇到404s,无限循环和什么有你。主要问题是我不完全理解这部分代码:

^[^.]+\.[^.]+$

apache greenie的任何帮助?万分感谢!

--- 修改 ---

我发现了一个更接近我想要的代码,但它有各自的问题。代码是:

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

此代码存在两个问题:

1)当我输入 example.com/test 时,它会首先通过 www.example.com/test ,我想完全避免可能的。

2)当我输入 example.com/test 时,它会以 example.com/test.php 结束,我希望避免使用该文件将 .php 扩展名作为最终目的地。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

#www to non-www
RewriteEngine On
#Important to place
RewriteBase /
RewriteCond %{HTTP_HOST} www\.example\.com$ [NC]
RewriteRule ^(.*)/?$ http://example.com/$1 [L,R=301]