使用htaccess在url RewriteRule中允许%0A

时间:2013-08-12 14:33:32

标签: .htaccess mod-rewrite curl

我的.htaccess中有一个重写器允许我添加由/分隔的无限参数。

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

这是正常的,直到我发送一个urlencoded字符串(使用cURL),其中包含编码\ n(%0A)。

因此server/param1/param2/param3text有效,但server/param1/param2/param3text1%0Aparam3text2没有。

我发现Stack Overflow上有一个Q提到了类似的问题:

How can I apply an htaccess rewrite rule to a URL containing a linefeed character (%0A)?

但我不能/不知道如何在[\r\n]实施(.*)

任何帮助?

3 个答案:

答案 0 :(得分:0)

好的,首先,我必须添加一个检查以确保该文件不存在(两个RewriteCond负责处理)。然后我必须创建一个匹配任何字符的模式,或者匹配一次或多次\r的{​​{1}}或\n。零次或多次运算符(+)未正确返回结果。

*

答案 1 :(得分:0)

您必须利用%{THE_REQUEST}变量从原始Apache Web服务器请求中获取实际路径。

试试这段代码:

RewriteCond %{QUERY_STRING} !^params=.+ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+[^/]+/([^\s]+) [NC]
RewriteRule ^ index.php?params=%1 [L,QSA]

然后在index.php内查看$_SERVER["QUERY_STRING"],查看其中包含%0A的完整纯粹路径。

答案 2 :(得分:0)

这里只是一个FYI:一种称为空白过滤的常见黑客方法使用%0A

  

可以使用替代方法在空格字符上绕过过滤   空格字符的空格字符(%20)。大多数SQL引擎   考虑换行(在* NIX环境中为%0a,在Windows中为%0a%0d)   环境),制表符或+字符作为有效空格: