我在传入请求的网址中传递&符号
e.g。
http://www.soundshelter.co.uk/label/Hit & Run
我曾尝试过urlencode&这样它就是一个有效的URL
http://www.soundshelter.co.uk/label/Hit%20%26%20Run
但是在get请求中,URL的& Run
部分被截断了。
我认为这可能与我的mod_rewrite
有关RewriteRule ^label/([^/]*)$ /index.php?label=$1 [NC]
获取请求是
$label = $_GET['label'];
有什么想法吗?
干杯
答案 0 :(得分:3)
'B'(逃避反向引用)
Apache必须在映射之前取消网址,因此反向引用会 在他们的时候被转义 应用。使用B标志, 中的非字母数字字符 反向引用将被转义。对于 例如,考虑规则:
RewriteRule ^(.*)$ index.php?show=$1
这会将
/C++
映射到index.php?show=/C++
。但它也会 将/C%2b%2b
映射到index.php?show=/C++
, 因为%2b
未被转义。 使用B
标志,它将改为映射 到index.php?show=/C%2b%2b
。这种转义在代理情况下尤为必要 如果出现,后端可能会中断 使用未转义的网址。
所以,试试:
RewriteRule ^label/([^/]*)$ /index.php?label=$1 [BNC]
此外,在访问您的页面后,我觉得您还有更多的PHP问题。我建议你发布更多代码上下文。
答案 1 :(得分:1)
尝试将重写规则更改为
RewriteRule ^label/([^/]*)$ /index.php?label=$0 [NC]