2011-03-15 34 views
1

即使在URL符号后剥去我传递一个URL&符号,其进入的GET请求数据被使用进行urlencode

例如

http://www.soundshelter.co.uk/label/Hit & Run 

我试图来urlencode的&所以,这是一个有效的URL

http://www.soundshelter.co.uk/label/Hit%20%26%20Run 

但URL的& Run部分获取请求被切断。

我想这可能是与我的mod_rewrite

RewriteRule ^label/([^/]*)$ /index.php?label=$1 [NC] 

的GET请求

$label = $_GET['label']; 

任何想法?

干杯

+0

http://www.soundshelter.co.uk/label/ 2011-03-15 19:32:51

回答

3

the documentation

'B'(逸出反向引用)

Apache在其映射之前取消转义网址,因此反向引用将 在它们 时被转义应用。使用B标志, 反向引用中的非字母数字字符 将被转义。对于 例如,请考虑以下规则:

RewriteRule ^(.*)$ index.php?show=$1 

这将映射到/C++index.php?show=/C++。但它也将 地图/C%2b%2bindex.php?show=/C++, 因为%2b已经转义。 使用B标志,它将改为将 映射到index.php?show=/C%2b%2b

这转义尤其需要在代理的情况下,当 如果呈现 与转义URL后端可能会断裂。

所以,尽量:

RewriteRule ^label/([^/]*)$ /index.php?label=$1 [BNC] 

此外,在经历到您的网页,它看起来像你对我有进一步的PHP的问题。我建议你发布更多的代码上下文。

+0

嗨伙计,该感谢。这是引起内部服务器错误。有任何想法吗?还有什么部分的代码,你需要看到进一步的PHP问题?欢呼你的帮助 – Franco 2011-03-16 09:05:49

+0

(a)看看你的服务器错误日志。(b)制作一个测试用例:一个最小的完整的代码页面,它仅显示问题,但也不包含无关的bumpf。 – 2011-03-16 10:27:50

+0

解决了我的问题。谢谢! – xZero 2015-06-10 14:32:40

1

试着改变你的重写规则

RewriteRule ^label/([^/]*)$ /index.php?label=$0 [NC]