似乎无法让 mod_rewrite 设置环境变量

似乎无法让 mod_rewrite 设置环境变量

这实在太奇怪了。

我已将以下内容放入文件中.htaccess

RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]

在我的 PHP 脚本中,有以下内容:

print_r($_ENV);

...打印出所有环境变量。

当我转到 时mydomain.com/a-file-on-the-server,我得到输出:

大批
    [DOCUMENT_ROOT] => ********
    [GATEWAY_INTERFACE] => CGI/1.1
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_CACHE_CONTROL] => 最大年龄=0
    [HTTP_CONNECTION] => 保持活动
    [HTTP_COOKIE] => ********
    [HTTP_HOST] => ********
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.4 (KHTML,如 Gecko) Chrome/5.0.375.99 Safari/533.4
    [PATH] => /bin:/usr/bin
    [查询字符串] =>
    [重定向状态] => 200
    [远程地址] => ********
    [远程端口] => 36345
    [请求方法] => 获取
    [REQUEST_URI] => ********
    [脚本文件名] => ********
    [脚本名称] => ********
    [服务器地址] => ********
    [服务器管理员] => ********
    [服务器名称] => ********
    [服务器端口] => 80
    [服务器协议] => HTTP/1.1
    [服务器签名] =>
    [服务器软件] => Apache
    [UNIQUE_ID] => ********

如您所见,环境变量未显示。我做错了什么?

答案1

唯一看起来不对的是你使用的正则表达式。请记住,正则表达式匹配整个请求 URI,该 URI 始终以 开头/。按照你的编写方式,它只会在请求以 开头时匹配,a-file...但这种情况永远不会发生。

尝试使用这个(我只/在 后面添加了一个^):

RewriteRule ^/a-file-on-the-server$ index.php [E=let_me_in:test]

您的规则的其他部分可能不正确,但我对环境变量没有太多经验。

答案2

嘿,我正在做一些测试,在设置环境变量时,

我做你所做的事情,例如 [E=变量:值,其他标志/值,(..)]

在我的 php 文件中,我看到了 $_SERVER['variable'] 中的那些增值税设置

你可能想要像这样获取你的 var:

回显 $_SERVER['let_me_in'];

应该输出测试。

答案3

今天我在执行 Apache mod_rewrite 工作时遇到了这个问题。问题是 PHP 将重写规则中定义的环境变量放入 $_SERVER 中,而不是 $_ENV 中(并且它会改变环境变量名称)。

包括 RewriteRule,例如

RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]

在我的设置中(带有 Apache 2.2.15 和 PHP 5.3.3 的 CentOS6),将提供变量作为 $_SERVER['REDIRECT_LET_ME_IN'],例如 index.php 的内容为:

<?php
   print_r($_SERVER['REDIRECT_LET_ME_IN']);
?>

将显示文本:

test

我使用 phpinfo() 函数调用来调查这个问题,并建议它在调试时查看所有可用的 $_ENV 和 $_SERVER 键/值对。

相关内容