造訪帶有 WWW 前綴的網站會導致 500 內部伺服器錯誤!

造訪帶有 WWW 前綴的網站會導致 500 內部伺服器錯誤!

我已遷移到新伺服器,每當我嘗試使用帶有 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 前綴訪問我的網站時,錯誤日誌顯示了這一點。

[Wed Sep 08 13:57:24 2010] [錯誤] [客戶端 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>

相關內容