2012-03-09 17 views
5

私はhtaccessをカスタム404エラーページ - PHPのページのためにのみ

ErrorDocument 404 /404.php 

と404のためにパーソナライズされたページを持っているそれは正常に動作しますが、それは.jpgのすべてを取り、の.js、.cssの等...
私はそれを.phpにして、他のすべてに対して通常の404エラーを出すことを望みます。

どこでもそのオプションが見つかりませんでした。

ありがとうございました。

+0

あなたは「それはすべてを取る」ことで何を意味していますあなたの404.phpファイルでこれを入れて? 404は、PHPリクエストや画像に関係なく、見つからないHTTPリクエストのレスポンスコードです。 –

+0

私が意味するのは、www.example.com/img/errorimg.jpgをすればwww.example.com/404.phpに導かれ、私はそれを望んでいません。 – user1040899

+0

URLリライティング(mod_rewrite)でこれを実装してみてください。存在しない.phpファイルへのリクエストをあなたのカスタム404.phpにリダイレクトしてください。それは可能です(3行または4行のみ) – LazyOne

答えて

5

わからないが、これを試してみる:Files Directiveドキュメントから

<Files ~ "\.php$"> 
    ErrorDocument 404 /404.php 
</Files> 

引用:

<ファイル>ディレクティブは、ファイル名に囲まれた ディレクティブの適用範囲を制限します。

+0

+1これは完璧に動作し、それはちょうどOPが尋ねたものです – ShadowScripter

+0

うまく動作します!あなたの助けを大変ありがとう:-) – user1040899

2

あり、これにいくつかの可能なアプローチがありますが、私は、次のいずれかを実行します:

@LazyOneにより示唆されるようにあなたのカスタムドキュメントへ.php拡張子を持つファイルのみをリダイレクトするために、mod_rewriteを使用することができます。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f # Only redirect to error for files that don't exist 
RewriteRule ^(.*)\.php$ /404.php [L] 

それとも、あなたがすでにそうであるようにPHPのエラーハンドラを介してすべてのものを指示し、要求されたリソースは、PHPスクリプトであるかどうかを判断するためにPHPを使用することができます。

<?php 

    if (strtolower(substr($_SERVER['SCRIPT_URL'], -4)) != '.php') { 
    // If the requested resource does not have a .php extension, include the standard error doc and exit 
    include '404.html'; 
    exit; 
    } 

    // Handle .php 404s here 

この2つ目のアプローチの欠点は、標準エラー文書を書き換えてPHPがユーザーに表示する動的情報(要求されたリソースパスなど)を取得できるようにすることです。

1

$_SERVER['REQUEST_URI']を利用して、簡単にエラーになったファイルの終了を確認することができますし、それはあなたのニーズに対応するか、単に異なる404

をレンダリングしていない場合は、通常の404にヘッダを投げます

$bad_url = $_SERVER['REQUEST_URI']; 
$bad_extension = substr(strrchr($bad_url,'.'),1); 

if($bad_extension != "php"){ 
    //Not PHP 
}else{ 
    //PHP 
} 
+0

404の代わりに301を送信することはかなり奇妙に見える –

関連する問題