【问题标题】:mod_rewrite NE flag - When is it helpful to encode special chars in the URL?mod_rewrite NE 标志 - 何时在 URL 中编码特殊字符有帮助?
【发布时间】:2011-07-13 20:41:45
【问题描述】:

我一直在查看 mod_rewrite 中的 [NE] (noescape) 标志。经过一番思考,我无法弄清楚我何时想要使用该标志。这意味着,在几乎每个RewriteRule 中保持启用标志似乎最有帮助。在某些情况下,不调用此标志给我带来了问题。

我处理的大部分规则是 HTTP 重定向 ([R]),而不是通过。

有人能说明什么时候让 mod_rewrite 对 URL 进行编码会有所帮助吗?

启用此标志通常是一种好习惯,还是使用允许 mod_rewrite 转义这些特殊字符的默认行为?为什么?

【问题讨论】:

  • 好问题,我很惊讶你还没有答案。而且我更惊讶的是,关于从 www 到非 www 重定向(反之亦然)的数十个答案没有在 RewriteRule 中添加 [NE]。你救了我的命,我不明白为什么我的 url 在 mod_rewrite 重定向期间被编码了两次。 +1

标签: .htaccess mod-rewrite url-rewriting url-encoding


【解决方案1】:

[NE] 标志在您将请求 URL 添加为授权签名的一部分时非常有用。

我刚刚遇到了一个错误,即授权在 .htaccess 关闭但未打开的情况下工作。事实证明,原因是重定向是 url 编码的项目,这些项目最终出现在 php $_GET 参数中。为了解决我更改的错误:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/0-9])$ $1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/0-9])$ $1/ [NE,R=301,L]

(授权签名由很多东西组成,其中之一就是请求url)

【讨论】:

  • “有人能解释一下when it is helpful to have mod_rewrite encode the URL?
  • @Servant -我回答了为什么部分,“启用此标志通常是一种好习惯,还是使用允许 mod_rewrite 转义这些特殊字符的默认行为?为什么?”举个例子。 - 基本上分享使用此标志的经验。
  • 再次投票,因为我发现这条信息很有用
  • 那些规则甚至是错误的,他们应该说 R=301,L。
【解决方案2】:

如果您查看source code for mod_rewrite,您会注意到如果启用了noescape,它会设置proxy-nocanon 标志。

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)具有潜在的安全后果。这可以解释为什么默认情况下禁用它,即使认为在大多数情况下启用它似乎更有用。

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多