【发布时间】:2011-01-22 14:54:13
【问题描述】:
我正在使用以下内容尝试从 url 中删除 WWW:
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://example.com$1 [R=301]
但由于某种原因它不起作用。有什么建议吗?
【问题讨论】:
标签: apache mod-rewrite
我正在使用以下内容尝试从 url 中删除 WWW:
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://example.com$1 [R=301]
但由于某种原因它不起作用。有什么建议吗?
【问题讨论】:
标签: apache mod-rewrite
如果您不想要硬编码的域名,这里有一个解决方案。不要忘记启动重写引擎,否则这将不起作用!
# 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>
【讨论】:
我总是首先使用 307(临时重定向),因为如果你弄错了,一些浏览器会永久缓存它。我最终安装了谷歌浏览器,只是因为我无法让我的 Firefox 忘记一个错误的重定向,即使我删除了整个缓存。
【讨论】:
作为对 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
【讨论】:
试试:
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>
完成以下 URL 中的步骤即可使用虚拟主机:Setting Up A Virtual Host in Apache。
【讨论】:
这是一个更通用的解决方案:
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
【讨论】:
http://www.example.com/ 到 http://example.com/ 和 https://www.example.com/ 到 https://example.com。