2012-03-21 2 views
1

내 .htaccess의이 줄은 서버가 존재하지 않는 사이트에 액세스하려고 할 때 나타나는 404 오류 대신 500을 출력하도록합니다.500 대신 내부 서버 오류 : 404 - 찾을 수 없음

RewriteEngine On 
# Don't rewrite requests to /de or other real files 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^.*/(css|scripts) 
# Rewrite incoming requests to their equivalent behind /de 
RewriteRule ^(.*)$ de/$1 [L,QSA] 

아아 나는 .htaccess에 익숙하지 않다. 이 오류가 404 오류 대신 500을 유발하는 곳은 어디입니까?

는 로그 파일에 오류이다

요구 때문에 가능한 구성 에러 10 내부 리디렉션의 한계를 넘었다. 필요한 경우 'LimitInternalRecursion'을 사용하여 제한을 늘리십시오. 역 추적을 얻으려면 'LogLevel debug'를 사용하십시오.

편집 :

RewriteRule ^(.*)$ de/$1 [L,QSA]

이 부분은 오류에 대한 책임이 있습니다. 그래도 404 오류 페이지가 표시되지 않는 이유는 무엇입니까?

+1

무한 재 작성 루프 또는 이와 유사한 것을 제작 한 것으로 보입니다. –

+0

예, 그렇습니다. 그 오류가 없기 때문에 위의 .htaccess로 인해 오류가 발생해야합니다. 그러나 thix를 고치는 방법? – BlueHorizon

+1

저는 mod_rewrite 전문가가 아닙니다. 나는 [문서를 읽으십시오] (http://httpd.apache.org/docs/2.0/rewrite/)를 시도하고 모든 줄을 주석 처리 한 다음 중단 될 때까지 줄 단위로 주석 처리를 시작합니다. "mod_rewrite에 대한 좋은 점은 Sendmail의 모든 구성 가능성과 유연성을 제공한다는 것입니다. mod_rewrite의 단점은 Sendmail의 모든 구성 가능성과 유연성을 제공한다는 것입니다." –

답변

2

이 부분은 오류에 대한 부분입니다. 그래도 404 오류 페이지가 표시되지 않는 이유는 무엇입니까?

이렇게하면 404 오류 페이지가 생성되지 않는 이유는 숨은 참조가 de/으로 다시 쓰여지는 것을 방지하기위한 조건 때문입니다.

은 당신이 가지고있는 3 개 예방 조건은 다음과 같습니다

그러나, 아무것도 예를 들어, /de/blahblah이 존재하지 않는 경우 재 작성을 방지하지
# these prevent rewriting if the URI doesn't point to a resource 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

# this prevents scripts from being rewritten 
RewriteCond %{REQUEST_URI} !^.*/(css|scripts) 

. 누군가가 /blahblah을 요청하면 따라서 다음과 같은 절차가 진행됩니다

  1. URI = /blahblah
  2. 검사 첫번째 condidion : blahblah 파일
  3. 검사 세 번째 조건이되지 않습니다 : blahblah이 디렉토리가 아닌 두 번째 조건은
  4. 확인 : blahblah/de/blahblah
  5. Rewr에 CSS 또는 스크립트
  6. 재 작성하지 않습니다 ITE 엔진 루프 URI = /de/blahblah
  7. 제 condidion
  8. 검사 : de/blahblah 파일
  9. 검사 3 조건 아니다 : de/blahblah
  10. 검사 번째 조건은 디렉토리가 아닌 de/blahblah이 CSS 또는 스크립트
  11. 재기록 아니다 /de/de/blahblah

당신은 다시 작성 조건의 추가 세트를 추가 할 필요가 경우 대상이 존재합니다,이 방법을

RewriteEngine On 
# Don't rewrite requests to /de or other real files 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^.*/(css|scripts) 
# make sure rewrite target actually exists as a file or directory 
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -d 
# Rewrite incoming requests to their equivalent behind /de 
RewriteRule ^(.*)$ de/$1 [L,QSA] 

:

RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/de%{REQUEST_URI} -d 

을 따라서, 당신은 뭔가를해야한다 de/ 디렉토리에 아무 것도 다시 쓰여지지 않기 때문에 404가 반환됩니다.