【问题标题】:Pointing .htaccess to a file将 .htaccess 指向一个文件
【发布时间】:2012-10-06 12:56:15
【问题描述】:

我正在开发一个开源项目。我不知道这个项目将安装在最终用户的哪个目录中。我需要向为我的项目创建的 .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 ;

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    听起来您需要从 ErrorDocument 指令中删除 http://localhost 部分。所以$_SERVER['SCRIPT_NAME'] 可能会为你做到这一点,$_SERVER['REQUEST_URI'] 也会这样做。

    【讨论】:

    • 那么像我问题的最后 4 行吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多