我一直在查看mod_rewrite中的[NE]
(noescape)标志。经过一番思考,当我不想使用该标志时,我无法弄清楚情况。这意味着,几乎在每个RewriteRule
中都保持启用该标志似乎最有帮助。在某些情况下,不调用此标志导致了我的问题。
我处理的大多数规则都是HTTP重定向([R]
),而不是通过。
有人会告诉我们什么时候使用mod_rewrite编码URL会有所帮助吗?
启用此标志是一般的好习惯,还是使用默认行为允许mod_rewrite转义这些特殊字符?为什么?
最佳答案
如果查看source code for mod_rewrite,您会注意到,如果启用了proxy-nocanon
,它将设置一个noescape
标志。
在revision where that line was first added中,它还包含以下注释:
确保mod_proxy_http不能规范化URI,并在mod_proxy_http:proxy_http_canon()的文件名中保留任何查询字符串(可能是qsappend'd)
接下来,如果您阅读mod_proxy documentation,则会看到以下有关nocanon
的内容:
通常,mod_proxy会规范化ProxyPassed URL。但这可能与某些后端(特别是那些使用PATH_INFO的后端)不兼容。可选的nocanon关键字可以禁止这种情况,并将URL路径“原始”传递到后端。请注意,这可能会影响后端的安全性,因为它取消了针对代理提供的基于URL的攻击的常规有限保护。
我可能会弄错,但这对我来说意味着在mod_proxy中使用nocanon
(在mod_rewrite中通过扩展名noescape
)具有潜在的安全影响。这可以解释为什么默认情况下禁用它,甚至认为在大多数情况下启用它似乎更有用。
关于.htaccess - mod_rewrite NE标志-在URL中对特殊字符进行编码何时有帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5279470/