【问题标题】:htaccess redirect with sub-domainhtaccess 重定向与子域
【发布时间】:2014-10-02 07:03:15
【问题描述】:

我有一个域 example.com,在 .htaccess 中,我使用以下代码将非 www 转发到 www 地址。

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

现在我创建了一个子域 test.example.com 并且由于上述规则,它转到http://www.test.example.com,所以我想编写它自己的 htaccess 文件来将 www 重定向到非 www。因此,在子域根目录中,我有具有以下规则的 .htaccess 文件。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^test\.example\.com$ [NC]
RewriteRule ^(.*)$ http://test.example.com/$1 [R=301,L]

它无法正常工作并进入重定向循环,我该如何解决?

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect


    【解决方案1】:

    拿出来!和逃跑

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^test.example.com$
    RewriteRule ^(.*)$ http://test.example.com/$1 [R=301,L]
    

    【讨论】:

    • 没用,还是一样的问题。我只在子域 htaccess 文件中进行了更改
    • 你确定它真的在命中那个文件吗?可能是虚拟主机问题?
    • 它达到了这一点,一旦我删除 htaccess 规则,它就会开始工作并转发到 www.test.example.com
    • 但是如果它转发到 www.test.example.com,那将意味着它已经到达了顶部。
    • 这就是问题所在,它进入了循环,因为这两个规则都在起作用。一旦我删除子域转发规则,它就可以正常工作。不知道如何避免顶级 htaccess 工作。
    【解决方案2】:

    您不需要 2 条规则。只需将此规则保留在您的主域的 main .htaccess 中即可:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]
    

    现在RewriteCond %{HTTP_HOST} ^example\.com$ 条件只会影响主域,而不会影响您的子域。

    【讨论】:

    • 更改 DocumentRoot 肯定会避免影响子域,但您仍然可以保留此规则,以防您将来创建一些 CNAME、别名域。
    【解决方案3】:

    我为这个问题找到了一个非常简单的解决方案。

    我的主站点文档根是/home/example/public_html,子域文档根是/home/example/public_html/test

    我刚刚将子域的文档根更改为/home/example/test 并且它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多