我有一个在网站的每个页面上运行的php函数,它使用全局变量,例如:
$var = "test";
function test() {
global $var;
echo $var;
}
这在直接访问/anyFile.php时工作正常,但网站使用htaccess文件重写网址,例如:
RewriteRule ^action/(.*)$ /index.php?action=$1 [L]
当htaccess重写url时,该函数不起作用,$ var未设置。
可能会发生什么,我该如何解决?(我需要使用“全局”,否则我需要重新编写很多东西。
答案 0 :(得分:2)
您需要使用[QSA,L]
代替[L]
:
RewriteRule ^action/(.*)$ /index.php?action=$1 [QSA,L]
QSA代表Query String Append,并将查询字符串(网址中?
之后的部分)转发给PHP脚本。
顺便说一句,您应该不使用register_globals(从PHP 5.3开始,已弃用,从PHP 5.4开始已移除) ,但请改用$_GET
superglobal。
---编辑---
按照下面的评论(你不能修改.htaccess ),你运气不好。您唯一的解决方案是在请求URI中解析查询字符串,并像使用$_GET
超全局一样使用它:
$queryString = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
parse_str($queryString, $query);
echo $query['action'];
我强烈建议您为您修改.htaccess
。