【问题标题】:How to always remove WWW from a url with mod_rewrite?如何始终使用 mod_rewrite 从 url 中删除 WWW?
【发布时间】:2011-01-22 14:54:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    如果您不想要硬编码的域名,这里有一个解决方案。不要忘记启动重写引擎,否则这将不起作用!

     # 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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        作为对 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
        

        【讨论】:

        • 正是我想要的。
        【解决方案4】:

        试试:

        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

        【讨论】:

        • 发生了这样的事情:example.com 的网页导致了过多的重定向。清除此站点的 cookie 或允许第三方 cookie 可能会解决问题。如果不是,则可能是服务器配置问题,而不是您的计算机问题。 我删除了这些,但网站仍然关闭!为什么会这样??
        • 问题1.你是同时用的吗?问题 2. 您是否将 IP 地址更改为正确的值?问题 3. 您是否拥有 example.com?
        • +1 用于虚拟主机方法。除非你真的需要,否则不要诉诸 mod_rewrite。
        • 回答 1:是的。我现在已经删除了这两个网站,并且该网站已启动。 Ans 2: 我不知道在哪里添加/删除虚拟主机。回答 3:我使用的是 example.com 而不是我的网站。你能告诉我更多关于虚拟主机的信息吗?我可以在哪里进行更改?我不知道.. 只使用 mod_rewrite。
        • 太好了,如果你需要的话,我也编辑了虚拟主机的东西。
        【解决方案5】:

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

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

        【讨论】:

        • 有没有办法检测和重写用户来自的相同 URL 方案(http 或 https)? http://www.example.com/http://example.com/https://www.example.com/https://example.com
        • REQUEST_URI 是否包含 index.php?出于某种原因,当我访问 www.example.com 时,它会重定向到 www.example.com/index.php
        • @CMCDragonkai 如果要附加原始查询字符串,请不要忘记 QSA 标志。
        猜你喜欢
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多