我的.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]
中实施(.*)
。
任何帮助?
答案 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) 环境),制表符或+字符作为有效空格: