我正在开发一个开源项目。我不知道这个项目将在最终用户上安装哪个目录。我需要为我的项目创建的.htaccess文件添加规则,以便404和其他指向我项目根目录中的特定文件。安装脚本在名为“setup”的文件夹中调用,与根文件夹相关,如root / setup / index.php。
我用来将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标头都有一个规则列表。
这对我来说已经有一个月了。今天,我开始收到服务器错误,日志文件说明如下:
[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 ;
答案 0 :(得分:2)
听起来您需要从http://localhost
指令中删除ErrorDocument
部分。因此$_SERVER['SCRIPT_NAME']
可能会为您做到这一点,$_SERVER['REQUEST_URI']
也是如此。