重写index.php?foo = bar& bar = foo到index.php?foo = bar& bar = foo

时间:2011-09-17 16:44:20

标签: php apache html5 .htaccess jquery-mobile

我正在使用jQuery Mobile,它的功能非常好。虽然有一些错误。

例如;我按照您的意图输入了我的HTML &而不是&。 jQuery没有正确阅读它,当它在网址中显示时,&显示的是&而不是它的意图。

例如

<a href="index.php?foo=true&amp;bar=false">Hello</a>

它将转到

 example.com/index.php?foo=true&amp;bar=false

什么时候应该去

 example.com/index.php?foo=true&bar=false

这真的很烦人,而且我使用了很多,所以我不能手工编写.htaccess,因为所有的get变量都会改变,而且我会写一个非常长的文件,我写的每个可能的foo和bar。

我的问题是:apache服务器是否有一种快速方法可以将&amp;更改为&

1 个答案:

答案 0 :(得分:0)

字符串index.php?foo=true&amp;bar=false在用作属性值时,会被浏览器解码为index.php?foo=true&bar=false

所以,点击此链接:

<a href="index.php?foo=true&amp;bar=false">Hello</a>

转到index.php?foo=true&bar=false,而不是index.php?foo=true&amp;bar=false

这是因为&是HTML中的特殊字符,而&amp;是您对其进行编码以消除其特殊含义的方式。

<a href="index.php?foo=true&bar=false">实际上无效,写<a href="index.php?foo=true&amp;bar=false">完全有效。


如果jQuery错误地读取它,jQuery中肯定存在错误,或者你做错了。

如果您有大量用户使用index.php?foo=true&amp;bar=false请求,您可能需要重写这样的请求:

RewriteCond %{THE_REQUEST} ^(GET|HEAD) (.*)&amp;(.*) HTTP/[\d.]+$
RewriteRule %2&%3 [R]

(在%{THE_REQUEST}上使用RewriteCond和匹配,因为RewriteRule在查询字符串上不匹配。)

这会将用户重定向到&amp;已解码为&的网址。如果有多个&amp;,则会有多个重定向。