私はオープンソースプロジェクトに取り組んでいます。このプロジェクトがエンド ユーザーのどのディレクトリにインストールされるかわかりません。プロジェクト用に作成された .htaccess ファイルにルールを追加して、プロジェクトのルートにある特定のファイルを 404 やその他のファイルが指すようにする必要があります。セットアップ スクリプトは、root/setup/index.php のようにルート フォルダに対して、"setup" というフォルダで呼び出されます。
404 をルートの .htaccess から errorcode.php (これもルート フォルダーにあります) に誘導するために使用するパスは次のとおりです。
$installURL = "http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']);
$save= $installURL;
$str = str_replace( '/setup', '', $save ); //remove /setup/
$installURL= $str ;
次に、.htaccess ファイルを開き、次のようなルールを作成します。
$fp = fopen("../.htaccess", "a");
fwrite($fp, "\n\n# ErrorDocuments \n");
fwrite($fp, "ErrorDocument 400 ". $installURL."/errorcode.php?error=400 \n");
400 個の HTTP ヘッダーすべてに対するルールのリストがあります。
これは、約1か月間私のために働いています。今日、サーバー エラーが発生し始めました。ログ ファイルには次のように記録されています。
[Thu Oct 04 11:56:59 2012] [notice] cannot use a full URL in a 401 ErrorDocument directive --- ignoring!
[Thu Oct 04 11:56:59 2012] [alert] [client 127.0.0.1] C:/wamp/www/Project-BlackHawk/.htaccess: Unsupported HTTP response code 428, referer: http://localhost/Project-BlackHawk/setup/index.php
私の質問は、ErrorDocument へのパスに次のようなものを使用することになっていますか?
$installURL = dirname($_SERVER['SCRIPT_NAME']);
$save= $installURL;
$str = str_replace( '/setup', '', $save ); //remove /setup/
$installURL= $str ;