【问题标题】:Redirect www to non-www is redirecting to script instead of nice URL将 www 重定向到非 www 是重定向到脚本而不是漂亮的 URL
【发布时间】:2012-07-11 10:23:47
【问题描述】:

我的域 domain.com 被重定向到 www.domain.com 但由于内部重定向,它仅在某些情况下有效:

  • domain.com/folder/ 应该重定向 到 www.domain.com/folder/ 但它被重定向到 www .domain.com/blog/index.php

这里的问题是,在内部,www.domain.com/folder/ 通过 RewriteRule 使用 blog/index.php

RewriteRule ^$          ../blog/index.php

我不知道为什么,但是你被重定向到脚本而不是漂亮的 URL。

它在这里工作(从 domain.com/folder/ 重定向到 www.domain.com/folder,当所有代码都在同一个“目录”条目中时):

<Directory /var/www/vhosts/domain.com/httpdocs/>
    Options -All +FollowSymLinks
    RewriteEngine on

    # redirect non-www to www
    RewriteCond %{HTTP_HOST}        ^domain\.com
    RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L] 

    RewriteRule ^folder/$           ../blog/index.php                       
</Directory>

它在这里不起作用(从 domain.com/folder/ 重定向到 www.domain.com/blog/index.php,当 2 个“目录”条目时被使用):

<Directory /var/www/vhosts/domain.com/httpdocs/>
    Options -All +FollowSymLinks
    RewriteEngine on

    # redirect non-www to www
    RewriteCond %{HTTP_HOST}        ^domain\.com
    RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L]                      
</Directory>
<Directory /var/www/vhosts/sonidon.com/httpdocs/folder/>
    RewriteEngine on
    RewriteRule ^$          ../blog/index.php
</Directory>

在两个目录中也使用 Options +FollowSymLinks +SymLinksIfOwnerMatch 进行了测试,但没有运气:(

我在这里看到了一个使用 VirtualHosts 而不是 Directory 的解决方案: Generic htaccess redirect www to non-www 但认为这应该是一种方法,因为这种麻烦不仅与“非www到www”有关,而且与任何重定向有关。

【问题讨论】:

    标签: mod-rewrite


    【解决方案1】:
    <Directory /var/www/vhosts/domain.com/httpdocs/>
        Options -All +FollowSymLinks
        RewriteEngine on
    
        # redirect non-www to www
        RewriteCond %{HTTP_HOST}        ^domain\.com
        RewriteRule ^(.*)$          http://www.domain.com/$1 [R=301,L]                      
    </Directory>
    <Directory /var/www/vhosts/sonidon.com/httpdocs/folder/>
        RewriteEngine on
        RewriteRule ^$          ../blog/index.php
        #ADDED LINE BELOW
        RewriteRule ^/$          ../blog/index.php
    </Directory>
    

    试试我上面添加的那行。我认为问题在于“http://domain.com”被重定向到“http://www.domain.com/”(注意尾部斜杠)。如果没有uri ^$,那么你在第二组中重定向,但实际上uri是“/”。

    【讨论】:

    • 感谢您的帮助,但这并不能解决问题。我已经在另一个重写的上方和上方尝试过该行,但它没有效果。我还为这两个 RedirectRules 中的每一个尝试了不同的目标脚本,并且“RedirectRule ^$”是执行的。这个问题最令人惊讶的是,我一直在 StackOverflow 和 Google 中寻找更深的东西,并没有发现有同样问题的人。非常感谢您的努力!
    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 2011-11-05
    • 2013-12-20
    • 2011-06-24
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多