PHP附加自定义标头以重定向

时间:2018-01-09 13:25:34

标签: php .htaccess http-headers

如果设置了自定义标头,我想不重定向请求(只是按原样继续处理请求)。其中的htaccess部分如下所示:

RewriteBase /
RewriteCond %{HTTP:My-Header} !=1
RewriteRule ^somefolder/(.*)$ /someAuthentication.php&url=$1 [QSA,R=302,L]

设置标头的身份验证:

header('HTTP/1.1 307 Temporary Redirect'); // ...to prevent browser caching of redirects
header('My-Header: 1');
header('Location: /somefolder/' . $_GET['url']); // ... redirect to previously requested file

但是,如果我,例如重定向到那里的其他一些脚本并使用getallheaders()检查现有标头,似乎My-Header未作为请求标头发送,这解释了为什么我只是ERR_TOO_MANY_REDIRECTS

我是否误解了标题的用法/定义,错误地设置标题或者htaccess条件是否有问题? 因为在我看来它应该是正确的,例如:

request file 
    -> if header set 
        -> ignore redirect (pass through)
    -> if header is not set 
        -> redirect
            -> set header
                -> redirect to request file

1 个答案:

答案 0 :(得分:1)

PHP的header函数设置响应标头。它是从服务器到客户端的标头。客户端将根据307响应标头启动重定向。该重定向采用客户端形成的全新HTTP 请求的形式。该请求不包含任何以前的响应标头

简而言之:在重定向期间,您无法让客户端发送任何一个特定的标题。相反,在URL本身中加入某种标志,这是重定向响应和请求之间唯一保证一致的标志。