我已迁移到新服务器,每当我尝试使用带有 www 前缀的网站时,都会收到 500 内部服务器错误。这在我以前的主机上工作得很好。这是 htaccess 文件的片段,它引用了 www - 其他地方都没有引用 www。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^blog/ - [L]
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1
RewriteRule ^search/(.*)/(.*)/(.*)/(.*) /search.php?searchfor=$1&sortby=$2&page=$3&searchterm=$4
RewriteRule ^confirmemail/(.*) /confirmemail.php?code=$1
RewriteRule ^resetpassword/(.*) /resetpassword.php?code=$1
RewriteRule ^resendconfirmation/(.*) /resendconfirmation.php?userid=$1
RewriteRule ^categories/ /categories.php
RewriteRule ^([-_~*a-zA-Z0-9]+)(\/)?$ /memberprofile.php?username=$1
RewriteRule ^browse/audios/(.*)/(.*)/(.*)/(.*) /audios.php?sortby=$1&filter=$2&page=$3&title=$4
RewriteRule ^browse/categories/audios/(.*)/(.*)/(.*)/(.*) /categoryaudios.php?sortby=$1&filter=$2&page=$3&title=$4
RewriteRule ^audios/(.*)/(.*) /playaudio.php?audioid=$1&title=$2
RewriteRule ^download/audio/(.*)/(.*) /downloadaudio.php?AUDIOID=$1&title=$2
RewriteRule ^members/audios/(.*)/(.*) /memberaudios.php?pid=$1&username=$2
RewriteRule ^syndicate/audios/(.*)/(.*) /syndicateaudios.php?filter=$1&title=$2
</IfModule>
我还可以检查什么?
我已经使用 Plesk 控制面板设置了这个域名 - 也许这就是问题所在?
感谢大家的帮助
更新
当我使用 www 前缀访问我的网站时,错误日志会显示此信息。
[2010 年 9 月 8 日星期三 13:57:24] [错误] [客户端 xx.xxx.xx.xxx] 请求超出了 10 次内部重定向的限制,这可能是由于配置错误。如有必要,请使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。
更新 2
我的网站在 httpd.conf 文件中有一个服务器别名形式 serverAlias www.mydomain.com
- 这会导致重定向循环吗?
更新 3
我无法让 apache 创建或写入重写日志,而且由于有人使用该站点,我不想进行太多的服务重启。
我已为这个问题添加了悬赏,因为我确实需要帮助!
答案1
这很有趣,因为日志表明正在发生重定向,但您没有任何使用 [R] 标志的规则。但是,当规则包含 http://... 时,[R] 标志是多余的,因此
RewriteRule ^(.*)$ http://mydomain.com/$1
规则是导致该问题的可能因素。
如果我是你,我会尝试将 [R=301,L] 放在该行的末尾,以确保其他规则不会以某种方式使用前一个主机名,从而导致循环。
另一种可能性是 PHP 参与了重定向循环。您可以使用 Firefox 和 livehttpheaders 插件访问 www 网站,并在此处分享标头吗?这可能会揭示导致重定向循环的原因。
我不认为 Plesk 的参与与此有任何关系,而且,我不认为 ServerAlias 与此有任何关系。这只允许为两个虚拟主机提供相同的配置:www.example.com 和 example.com。
希望有帮助!
答案2
还有一个重写日志,激活它并观察会发生什么。
大多数情况下,它是一条可重入规则。
答案3
怎么样:
<IfModule mod_rewrite.c>
RewriteEngine On
ReWriteCond %{HTTP_HOST} !^mydomain
ReWriteRule ^(.*)$ http://mydomain.com/$1
...
</IfModule>