Apache htaccess:如何在Firefox上用斜杠重写反斜杠?

Apache htaccess:如何在Firefox上用斜杠重写反斜杠?,apache,.htaccess,mod-rewrite,url-rewriting,rewrite,Apache,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,如何在Firefox上用斜杠'/'重写反斜杠'\' Chrome、IE、Safari、Opera已构建浏览器,并用斜杠重写反斜杠。 但是Firefox3.6.13返回404错误页面 令人惊讶的是,这似乎是正确的行为。HTTP或HTTPS URL中不允许使用反斜杠(根据),因此应将其转义。请注意,RFC明确地提到反斜杠是一个不安全的字符: 其他字符不安全,因为 已知网关和其他传输代理有时会修改 这样的人物。这些字符是“{”、“}”、“|”、“\”、“^”、“~”, “[”、“]”和“`” 所有不安

如何在Firefox上用斜杠
'/'
重写反斜杠
'\'

Chrome、IE、Safari、Opera已构建浏览器,并用斜杠重写反斜杠。
但是Firefox3.6.13返回404错误页面


令人惊讶的是,这似乎是正确的行为。HTTP或HTTPS URL中不允许使用反斜杠(根据),因此应将其转义。请注意,RFC明确地提到反斜杠是一个不安全的字符:

其他字符不安全,因为 已知网关和其他传输代理有时会修改 这样的人物。这些字符是“{”、“}”、“|”、“\”、“^”、“~”, “[”、“]”和“`”

所有不安全字符必须始终在URL中编码

换句话说,Firefox做的是正确的,即使它破坏了错误使用反斜杠的页面(主要是因为混淆了URL语法和Windows路径语法)。其他浏览器试图读懂页面作者的想法,他们在发送请求之前将反斜杠转换为正斜杠;这是否是一件好事是一个意见问题

您是否尝试匹配反斜杠的转义版本-
%5C

这是Apache和FF错误,
希望它能很快被修复

  • 默认情况下AllowEncodeDSLASH应该是“开”的,甚至可能会被弃用
  • RFCs中没有反斜杠
    (\)
    列为保留字符。因此a
    %5C

    应始终像
    %7E
    转换为波浪形
    (~)
    一样进行解码
  • 要在Apache上解决此问题:
    VirtualHost
    httpd-vhosts.conf或httpd.conf和.htaccess中添加
    allowencodedslash:

    RewriteEngine On 
    RewriteCond %{REQUEST_URI} ^(.*)\\(.*)$
    RewriteRule .* %1/%2 [R=301,NC,L]
    

    至于观点——我认为试图猜测作者的意图注定是失败的(参见过去十年中的
    怪癖模式
    雷区,由这种读心术的尝试造成)。如果URL被严重破坏,浏览器不应该试图“修复”它——它应该被破坏,而不是强化作者编写错误代码的习惯。为作者修改它会导致“嗯,对我有用”。谢谢重播!但是
    RewriteCond%{REQUEST\u URI}(.*)%5c(.*)$
    也不能解决这个问题。仅Firefox for www.google.com/intl/en\about.html将返回404错误页面,其他浏览器将返回www.google.com/intl/en/about。htm@Binyamin:是的,而且总是这样,因为FF实际上发送反斜杠,而其他人将用斜杠替换它;重写应该发生在您的服务器上(而不是谷歌的服务器上),它不会修复所有服务器上的这种行为。另外,您是否有
    [NC]
    参数(不区分大小写的匹配)?不幸的是,它也不适用于
    NC
    。其他一些建议如何用FF上的斜杠重写反斜杠!?
    RewriteEngine On 
    RewriteCond %{REQUEST_URI} ^(.*)\\(.*)$
    RewriteRule .* %1/%2 [R=301,NC,L]