【问题标题】:need to escape # (hash/pound) character in .htaccess rewrite rule需要在 .htaccess 重写规则中转义 # (hash/pound) 字符
【发布时间】:2011-04-04 20:13:25
【问题描述】:

这个问题相当简单,但我已经好几个小时找不到答案了。

我需要做的是:

RewriteRule ([^#])#(.*) $1\%23$2

这基本上意味着我想通过 url 转义来自外部代码片段的该死的井号。

反斜杠 (\) 无法转义此符号...请不要建议使用 %23 而不是 #,因为它也不起作用。

%23 与 # 不匹配,因为它根本不是 == %23

【问题讨论】:

    标签: apache .htaccess url-rewriting escaping


    【解决方案1】:

    我刚刚在这个论坛上发表了几篇帖子后为一个网站工作,我正在使用重写规则,其中 NE 不转义和 R=301 重定向选项:

    RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/$1 [R=301,NE,L]
    

    这会将所有 gallery/variable 重定向到 /gallery.html#/variable

    编辑:规则的重要部分是 NE,它指示服务器解析输出而不转义字符。如果没有这个,它将尝试转义重写规则中的 # ,这是 OP 所要求的。

    【讨论】:

    • 请解释而不是仅仅举个例子
    • 虽然这个答案包含有用的信息,但它似乎与建议的 OP 的问题有关。 OP 正在尝试匹配 RewriteRule pattern 中的 #,而上面的答案是在 RewriteRule substitution 中使用 #(片段标识符)。这是完全不同的。
    • @w3dk,OP 声明:“我想通过 url 转义该死的井号。”你用 NE 做这个。
    • @Dave 必须承认,回头看看这个问题,它似乎相当模棱两可......看起来 OP 都试图匹配请求中的#(哈希) 在响应中发回哈希。 NE(又名NOESCAPE)标志仅对后者有所帮助(尽管它不会转义任何东西-这是您在答案中正确陈述的内容)。 accepted 答案处理前者(请求中的哈希) - 如果哈希尚未在请求中进行 URL 编码,则它将成为显示停止器。
    【解决方案2】:

    URL 的哈希部分不可用于重写。当 Web 浏览器向 Web 服务器发送 URL 请求时,它会将所有内容发送到哈希符号。哈希仅在客户端可用(例如 JavaScript 代码可以看到它)。

    【讨论】:

    • 这不是逃避#的方法,但显然在我的情况下这并不重要。所以我不会继续并将其设置为已接受。谢谢
    • 虽然 # 之后的部分确实在请求 URL 中不可用,但您可以将其作为重定向 URL 的一部分。您只需要使用另一个答案中提到的 NE 选项来逃避它。
    • @PeterDolberg @Keith 问题是关于匹配模式中的#。另一个答案可能会帮助从 Google 找到这个问题的人,但它不是这个特定问题的有效答案。 NE 在这里不相关,我的回答不是“完全错误”。
    • 约翰,你是对的。抱歉,我看错了问题;正如您所怀疑的那样,我正在寻找另一个答案中的信息。
    【解决方案3】:

    http://httpd.apache.org/docs/2.0/misc/rewriteguide.html 中搜索扩展重定向。您的问题有一个很好的解决方案。

    【讨论】:

      【解决方案4】:

      .htaccess

      RewriteRule  old\.php redirect.php?url=http://example.com/new.php|hash [R=301,QSA,L]
      

      redirect.php

      <?php
          $new_url = str_replace("|", "#", $_GET['url']);
          header("Location: ".$new_url, 301);
          die;
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 2014-01-09
        相关资源
        最近更新 更多