2012-03-25 21 views
3

Apacheサーバ上で.htaccessファイルを使用しているすべてのファイルからPHP拡張機能を削除しようとすると、すべてがうまくいきます。拡張機能は削除され、すべてがはるかによく見えます。Mod_Rewrite拡張機能の削除の機能404

しかし、私は小さな問題を抱えています:普通は./nonexistent.phpのようなページに行くと404エラーが発生します。しかし、URLを書き換えて./nonexistentに行くと、代わりに500 Internal Server Errorと表示されます。

理想的には、自分のユーザーをカスタムの「ページが見つかりません」ページにリダイレクトすることは理想的ですが、現在はこれを行う方法が見つかりません。私は設定を試してみた

Options -MultiViews 

RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ $1.php 

はここで私が使用しているコードだErrorDocument 500 /nopeが、しかし、これはどちらかの効果を持っていないようです。

結論として、デフォルトである「ページが見つかりません」システムと同じ機能を維持しながら、誰も拡張機能を書き換える方法を知っていますか?

答えて

2

あなたは上記の書き換え条件を使用して、存在しないファイルを要求しているとき、あなたは無限のリダイレクトに実行されています。

あなたがhttp://yoursite.com/i-dont-existにアクセスする場合は、最初の条件が真評価され、i-dont-existが非存在しないファイルなので、それはまた、Apacheは再帰を制限し、あなたを与えるまで、書き換えパターンが続くので、存在しないi-dont-exist.phpに書き換えしようとします500エラー(あなたが500エラーが発生するまで、本質的にそれが継続的にi-dont-exist.php.php.php.php.php...phpに書き換える。

あなたは.php拡張子を持つファイルを書き換える前に存在していることを確認するために追加のチェックを追加することによってこの問題を解決することができます。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f #make sure $1.php exists before rewriting 
RewriteRule ^(.*)$ $1.php 

file.phpが存在する場合はそれに書き換えられ、そうでない場合は404エラーページが表示されます。

+0

drew010あなたは正しいですが、他の答えは私の問題を解消するので実用的ですが、実際には解決しません。 – elliottbolzan

+0

Apache 'error_log'をチェックすると、500エラーの正確な原因がわかります。非常にビジーなサイトがある場合は、エラーログにたくさん書き込んで、不必要に大きくなり、実際のエラーを見つけてデバッグするのが難しくなります。これが役立つかどうかを確認してください。 – drew010

+0

ご協力いただきありがとうございます。 – elliottbolzan

1
+0

恐ろしい答えですが、私は単純に 'ErrorDocument 500/nope'を' ErrorDocument 500 http:// path.com/to_nope'に置き換えなければなりませんでした。 – elliottbolzan

+1

最初に500の内部サーバーエラーが発生することはありません。 500エラーページを上書きするのは回避策ですが、問題を解決していません。 – drew010