我正在使用以下内容尝试从网址中删除WWW:
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://example.com$1 [R=301]
但由于某种原因,它不起作用。有什么建议吗?
答案 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>