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

Yet*_*eti 15 apache mod-rewrite

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

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

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

Gum*_*mbo 44

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

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

  • 有没有办法检测并重写用户来自的相同URL方案(http或https)?`http:// www.example.com /`到`http:// example.com /`和`https:// www.example.com /`到`https:// example.com`. (4认同)

Kyl*_*ndo 24

尝试:

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

没有mod_rewrite:

<VirtualHost 10.0.0.1:80>
        ServerName www.example.com
        Redirect permanent / http://example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

可以通过完成以下URL中的步骤来使用虚拟主机:在Apache中设置虚拟主机.


Fre*_*röm 9

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

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

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

http://www.example.com/smth -> http://example.com//smth
Run Code Online (Sandbox Code Playgroud)


Kon*_*ner 6

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