PHP替换第一?在查询字符串中&符号

时间:2015-05-16 01:22:11

标签: php apache .htaccess mod-rewrite query-string

(在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等)之后。

感谢您的任何指示!

1 个答案:

答案 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?