【问题标题】:Apache mod_rewrite: force www only if not in localhostApache mod_rewrite:仅当不在本地主机中时才强制 www
【发布时间】:2012-05-01 03:49:20
【问题描述】:

我的 htaccess 中有以下内容来强制 URL 中的 www:

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

如果不在本地主机上,我如何只应用它?我可以提出某种 if 条件吗?现在,我得到这样的东西:http://www.localhost/ ...

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    如果您使用的是 80 以外的端口(例如 localhost:8080),您可能还需要将其添加到正则表达式中:

    RewriteCond %{HTTP_HOST} !^localhost(?::\d+)?$ [NC]
    RewriteCond %{HTTP_HOST} !^127\.0\.0\.1(?::\d+)?$
    

    【讨论】:

      【解决方案2】:

      我添加了所有这些:

      RewriteCond %{HTTP_HOST} !=localhost
      RewriteCond %{HTTP_HOST} !=127.0.0.1
      RewriteCond %{REMOTE_ADDR} !=127.0.0.1
      RewriteCond %{REMOTE_ADDR} !=::1
      

      【讨论】:

        【解决方案3】:

        RewriteCond 已经是您的“如果条件”。只需添加另一个:

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

        【讨论】:

        • 或者使用 RewriteCond %{REMOTE_ADDR} !127.0.0.1 作为替代。
        • RewriteCond %{REMOTE_ADDR} !=127.0.0.1 准确地说!
        • 如果启用了 IPv6,localhost 可能会解析为 ::1,因此您可能需要添加:RewriteCond %{REMOTE_ADDR} !=::1
        • 这里为什么不能使用空间? != localhost
        猜你喜欢
        • 2018-04-22
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多