(在CentOS 6上运行的LAMP堆栈,PHP 5.3.3,httpd版本2.2.15)
我正在尝试将整个查询字符串传递给我的PHP脚本,但如果查询字符串包含任何问号字符,那么第一个?角色正在被一个&字符。
在access_log中,显示正确的查询字符串,包括问号。
但是,如果我回显$ _SERVER ['QUERY_STRING']全局,那么第一个?被取代了。所以我假设翻译/规范化正在PHP中的某个地方进行。
例如:http://l.sitename.com/IsThis?thequerystring?
我们希望$ _SERVER ['QUERY_STRING']是“IsThis?thequerystring?” 但相反,它实际上是“IsThis& thequerystring?”
这是access_log条目:
"GET /IsThis?thequerystring? HTTP/1.1" 200 43 "-"
这是.htaccess条目:
RewriteCond %{HTTP_HOST} ^l\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/link.php?$1 [NC,L,P,QSA]
最奇怪的是:它 正在运行,但现在不是在安装更新(CentOS,HTTPD,PHP等)之后。
感谢您的任何指示!
答案 0 :(得分:1)
删除QSA
标记,否则?
转换为?
:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php?$1 [L,P]
RewriteCond %{QUERY_STRING} .+
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php?$1?%{QUERY_STRING} [L,P]
有了这个,你将得到:
$_SERVER["QUERY_STRING"] = IsThis?thequerystring?