0

这是我第一次使用stackoverflow,我通常会在谷歌或一些朋友的帮助下找到我关于开发问题的答案。这次不行 !

我遇到了要定义双重规则的 .htaccess 文件。最初我有这个 URL 重写代码:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) /index.php?query=$1&%{QUERY_STRING} [L]

它就像一个魅力,但我看到谷歌索引的网站的许多页面在我网站的子域上重复,所以我决定在 .htaccess 中添加这段代码:

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

请注意,我在 RewriteEngine 之后添加了此代码。结果几乎是我所期望的,来自 mail.domain.com/mypage.html 等子域的 301 重定向正在工作并导致 www.domain.com/mypage.html 但 URL 重写页面的第二条规则就像取消了!所以所有使用第二条规则的页面都会出现 404 错误。

我已经测试了许多不同的东西,但不知道如何解决这个问题?有人有帮助我成功的秘诀吗?

提前谢谢你们!

4

1 回答 1

1
RewriteCond %{HTTP_HOST} !mydomain.com/$

此条件始终匹配,因为您要求的主机名不以mydomain.com/;结尾。%{HTTP_HOST}永远不会以斜杠结尾,因为它只包含没有路径的主机名。由于条件始终匹配,因此它RewriteRule始终有效,并被标记为[L](最后一条规则)。我不知道为什么它不会导致重定向循环,可能是一些短路逻辑在mod_rewriteURL 未更改时停止重写。

你可能想要的是这样的:

RewriteCond %{HTTP_HOST} !=www.mydomain.com
RewriteRule ^(.*) http://www.mydomain.com/$1 [R=301,L]
于 2012-06-20T09:35:22.827 回答