2012-03-21 6 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が原因で発生するはずです。これがなければ、エラーは発生しないからです。しかし、どのようにチックスを修正するには? – BlueHorizon

+1

私はmod_rewriteの専門家ではありません。私は[ドキュメントを読む](http://httpd.apache.org/docs/2.0/rewrite/)を試し、すべての行をコメントアウトして、それが壊れるまで行ごとにコメントを開始します。 mod_rewriteは、sendmailの設定と柔軟性をすべて提供します。mod_rewriteの欠点は、Sendmailのすべての設定と柔軟性を提供することです。 " –

答えて

2

この部分はエラーが原因です。どうして404エラーのページを防ぐのですか?

これが404エラーページを生成しない理由は、ブラインドマッチがde/に書き換えられないようにするためです。

これらはあなたが持っている3つの予防条件である:

# 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) 

しかし、何があれば、書き換えを防止していない、例えば、/de/blahblahは存在しません。誰かが/blahblahを要求した場合このように、これは何が起こるかです:

  1. URI = /blahblah
  2. チェック最初condidion:blahblahファイル
  3. チェックし第三の条件ではありません。blahblahはディレクトリではありません第2の条件は
  4. チェック:blahblahはCSSまたはスクリプトではありません
  5. /de/blahblah
  6. 書き換えITEエンジンループ、URI = /de/blahblah
  7. 第condidion
  8. チェック:de/blahblahファイル
  9. チェック三条件ではない:de/blahblah
  10. チェックする第2の条件がディレクトリでないde/blahblahは、CSSまたはスクリプト
  11. 書き換えません〜/de/de/blahblah
  12. など

あなたがリライトする条件の追加セットを追加する必要が場合、ターゲットが存在します、この方法で

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が返されます。

関連する問題