3

.htaccess ファイルに次の行があり、動作します。

ErrorDocument 404 http://localhost/error.php?code=404

これらのいずれかに変更すると、機能しなくなります (どちらが正しいかわかりません)。

ErrorDocument 404 error.php?code=404
ErrorDocument 404 /error.php?code=404

.htaccess ファイルと error.php は同じディレクトリにあります。なぜこうなった?

注:私はWampserverにいます

完全な .HTACCESS ファイル

RewriteEngine on

RewriteRule ^([a-z]+)$ $1.php

ErrorDocument 404 http://localhost/error.php?code=404
4

3 に答える 3

1

これが機能しない理由は、クエリ文字列が原因です。

ディレクティブに完全な URL を指定しない場合ErrorDocument、Apache は を に対するローカル ファイル パスとして扱いますDocumentRoot/少し紛らわしいことに、技術的には相対パスですが、先頭を使用する必要があります。

さて、あなたがやりたいことは、実際には一見したように単純ではありません。ローカル パスを扱っているため、クエリ文字列部分には特別な意味がなくなり、ファイル名のリテラル部分として扱われます。明らかに、ファイルは と呼ばれるerror.php?code=404のではなく、 と呼ばれるだけerror.phpです。ErrorDocumentありがたいことに、標準のルーティング エンジンを介して渡される内部要求を生成するため、少し手を加えるだけで可能です。ここで必要なのは、ちょっとしたmod_rewrite魔法です。

次のことを試してください。

ErrorDocument 404 /error-404.php

RewriteEngine On
RewriteRule ^/?error-([0-9]+)\.php$ /error.php?code=$1 [L,QSA]

これは、.htaccess ファイルと error.php ファイルの両方がDocumentRoot.

于 2012-07-18T12:30:45.197 に答える
0

私の意見では、404(403、502など)コードはHTTPコードであるため、この場合はHTTPプロセスを参照するErrorDocument命令にhttp://命令が必要であることが論理的である可能性があります。

于 2012-07-18T12:27:32.750 に答える
0

DaveRandom のソリューションを使用して、Rフラグを RwriteRule に追加するだけで機能します。

この構成を試してください:

ErrorDocument 404 /error-404.php

RewriteEngine On
RewriteRule ^/?error-([0-9]+)\.php$ /error.php?code=$1 [L,R,QSA]

私にとっては、Apache 2.4.12で動作します

于 2015-11-04T09:26:08.460 に答える