具有编码新行的mod_rewrite正则表达式规则(%0A)

时间:2013-12-23 17:22:09

标签: regex apache .htaccess mod-rewrite urlencode

我遇到一些mod_rewrite规则不匹配的问题,我认为应该这样。

规则如下:

RewriteRule ^api/(.*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]

示例网址是:

http://ourdomain.tld/api/aaaaa/bbbb/cccc%0Adddd.json

只要您在网址中没有$0A,此规则就可以正常工作(据我所知)。

我意识到.表示除了新行以外的任何其他内容并尝试了以下规则来绕过新行或百分比符号,因为我不确定它在mod_rewrite时的格式看到它,但没有一个有效:

RewriteRule ^api/([.\s]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]


RewriteRule ^api/([.\%]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]


RewriteRule ^api/([.%]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]

奇怪的是,即使是没有%符号的网址,所有网址都会失败:

RewriteRule ^api/([.]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]

如果有人能够为我阐明这一点,我会非常感激,因为我无法真正改变API的工作方式(IE我不能使其成为base64编码等),并且需要获取一个值。新的一行。

我在http://htaccess.madewithlove.be/进行了测试,他们的工具认为它应该有效!

修改

我们为上面的网址提供了一个解决方案,但它不适用于以下示例:

/api/something/sent+40.06K+bytes++received+7.83M+bytes++542.70K+bytes%2Fsec%0Atotal+size+is+19.83G++speedup+is+2520.16+%28Completed+in+14+seconds%29.json

感谢。

1 个答案:

答案 0 :(得分:2)

  

....并且需要使用换行符来获取值。

你错过了角色^被认为是角色类[^.]内的否定操作符

RewriteRule ^api/([^.]*)\.(json|xml|csv|txt|printr|basictxt)$ api/endpoint.php?api_request=$1&api_response_type=$2 [QSA]

请参阅regex101演示