这实在太奇怪了。
我已将以下内容放入文件中.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 键/值对。