PHP 先替换?在带有 & 符号的查询字符串中
PHP replacing first ? in querystring with & symbol
(LAMP Stack 运行 on CentOS 6, PHP 5.3.3, httpd version 2.2.15)
我试图将整个查询字符串传递给我的 PHP 脚本,但是如果查询字符串包含任何问号字符,第一个 ?字符被替换为 & 字符。
在 access_log 中,显示了正确的查询字符串,包括问号。
但是,如果我回显 $_SERVER['QUERY_STRING'] 全局,第一个 ?被替换。所以我假设 translation/normalization 发生在 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? [NC,L,P,QSA]
最奇怪的事情:它 曾经 工作,但现在在安装更新(CentOS、HTTPD、PHP 等)后它不工作了。
感谢指点!
删除 QSA
标志,否则 ?
将转换为 ?
:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php? [L,P]
RewriteCond %{QUERY_STRING} .+
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php??%{QUERY_STRING} [L,P]
有了这个你将得到:
$_SERVER["QUERY_STRING"] = IsThis?thequerystring?
(LAMP Stack 运行 on CentOS 6, PHP 5.3.3, httpd version 2.2.15)
我试图将整个查询字符串传递给我的 PHP 脚本,但是如果查询字符串包含任何问号字符,第一个 ?字符被替换为 & 字符。
在 access_log 中,显示了正确的查询字符串,包括问号。
但是,如果我回显 $_SERVER['QUERY_STRING'] 全局,第一个 ?被替换。所以我假设 translation/normalization 发生在 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? [NC,L,P,QSA]
最奇怪的事情:它 曾经 工作,但现在在安装更新(CentOS、HTTPD、PHP 等)后它不工作了。
感谢指点!
删除 QSA
标志,否则 ?
将转换为 ?
:
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php? [L,P]
RewriteCond %{QUERY_STRING} .+
RewriteCond %{HTTP_HOST} ^l\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/user.php??%{QUERY_STRING} [L,P]
有了这个你将得到:
$_SERVER["QUERY_STRING"] = IsThis?thequerystring?