【问题标题】:PHP Redirect without affecting headersPHP 重定向而不影响标头
【发布时间】:2012-06-23 05:49:34
【问题描述】:

我正在尝试创建一个 PHP 脚本,该脚本将始终在每次页面加载时被调用,而不更改网站的现有代码,并且尽可能少地进行额外配置。

这是我的问题,我不希望它对实际请求(标头)产生任何影响。这是所需的流程:

请求-> somescript.php -> 实际目的地

所以,我不能使用 header() 函数,解决方案必须完全是服务器端。

我在想,在脚本完成它的任务后,它可以包含/需要预期的 PHP 文件。

任何想法/建议将不胜感激。

问候,

布兰登·马丁

PS:我不能在 .htaccess 文件中使用 php_value,因为有时会在 CGI 环境中使用。

底线:需要在每个服务器请求上运行一些代码

【问题讨论】:

标签: php header web http-headers


【解决方案1】:

您希望一个脚本在任何其他脚本之前执行?如果您使用 Apache,我可以想到一种可能的解决方案...如果您可以在 .htaccess 中重写...

.htaccess:

RewriteEngine On
RewriteBase /test
RewriteRule !(common.php) common.php/$1

common.php:

<?php
$request=substr($_SERVER['REQUEST_URI'],6);
if($request==""){
    $request="index.php";
}
if(substr($request,0,1)=="/"){
    // Prevent browsing local files (*nix)
    header("HTTP/1.1 403 Forbidden",true,403);
}else if(!file_exists($request)){
    // Not found
    header("HTTP/1.1 404 Not Found",true,404);
}else{
    // Request URI should be valid
    do_what_you_want_to_do_before_anything_else();
    // Include the original request URI...
    if(substr($request,-4)==".php"){
        include $request;
    }else{
        // Prevent executing non-PHP code
        echo file_get_contents($request);
    }
}
?>

还有很多代码要写,包括安全措施和更改$_SERVER 数组(如果子脚本关心的话)。

【讨论】:

    【解决方案2】:

    如果您可以修改服务器的 php.ini,也许您可​​以使用auto_prepend_file 指令?

    但您需要小心:如果您直接将其添加到 .ini 文件中,则它对该网络服务器托管的所有站点都是有效的。您还可以通过 apache 或 php-fpm 中的 php_value 添加它以在每个站点上执行此操作,或者您可以在脚本中构建站点检测。

    就配置的难易程度而言,再简单不过了。

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 2021-09-08
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多