如何使用mod_rewrite始终从URL中删除WWW?

时间:2010-03-02 07:28:27

标签: apache mod-rewrite

我正在使用以下内容尝试从网址中删除WWW:

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

但由于某种原因,它不起作用。有什么建议吗?

5 个答案:

答案 0 :(得分:43)

这是一个更通用的解决方案:

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

答案 1 :(得分:24)

尝试:

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

没有mod_rewrite

<VirtualHost 10.0.0.1:80>
        ServerName www.example.com
        Redirect permanent / http://example.com/
</VirtualHost>

可以通过完成以下网址中的步骤来使用虚拟主机:Setting Up A Virtual Host in Apache

答案 2 :(得分:9)

作为Kyle答案的一个小调整,我会在RewriteRule匹配条件中添加/,如

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

否则,结果会出现双斜杠。

http://www.example.com/smth -> http://example.com//smth

答案 3 :(得分:5)

我总是首先使用307(临时重定向),因为如果你弄错了,一些浏览器会永久地缓存它。我最终安装谷歌Chrome只是因为即使我删除了整个缓存,也无法让我的Firefox忘记错误的重定向。

答案 4 :(得分:3)

如果您不需要硬编码域名,这是一个解决方案。不要忘记启动重写引擎,否则这将无效!

 # Start rewrite engine
 <IfModule mod_rewrite.c>
   Options +FollowSymlinks
   RewriteEngine On
 </IfModule>

 # Rewrite "www.example.com -> example.com"
 <IfModule mod_rewrite.c>
   RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
   RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
 </IfModule>