2

私はオープンソースプロジェクトに取り組んでいます。このプロジェクトがエンド ユーザーのどのディレクトリにインストールされるかわかりません。プロジェクト用に作成された .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 ;
4

1 に答える 1

2

ディレクティブhttp://localhostからその部分を削除する必要があるようです。ErrorDocumentおそらくあなた$_SERVER['SCRIPT_NAME']のためにそれをするでしょう$_SERVER['REQUEST_URI']

于 2012-10-06T04:56:15.130 に答える