WWW 접두어를 사용하여 사이트에 액세스하면 500 내부 서버 오류가 발생합니다!

WWW 접두어를 사용하여 사이트에 액세스하면 500 내부 서버 오류가 발생합니다!

새 서버로 마이그레이션한 후 www 접두어를 사용하여 사이트를 사용하려고 하면 500 내부 서버 오류가 발생합니다. 이것은 이전 호스트에서 잘 작동하는 데 사용됩니다. 다음은 www를 참조하는 htaccess 파일의 일부입니다. 다른 곳에서는 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

재작성 로그를 생성하거나 기록하기 위해 아파치를 얻을 수 없었고 사이트를 사용하는 사람들이 있기 때문에 서비스를 너무 많이 다시 시작하고 싶지 않습니다.

정말 도움이 필요하기 때문에 이 질문에 현상금을 추가했습니다!

답변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>

관련 정보