【问题标题】:.htaccess RewriteRule pointing to div id on page.htaccess RewriteRule 指向页面上的 div id
【发布时间】:2011-08-23 18:38:47
【问题描述】:

我有一个基本的网页,上面有几个 id 为 1 到 10 的 div。当我访问这样的 URL 时:

www.example.com/page.php#six 

页面将加载,我将查看 div id 6。

我想要一个允许这样的网址的 RewirteRule:

www.example.com/page/six 

页面将加载,我将查看 div id 6。

我现在尝试使用的规则如下但不起作用:

RewriteRule ^page/six /page.php\#six [L,QSA]

非常感谢您的帮助:)

【问题讨论】:

  • url 的锚定部分(即 # 之后的部分)仅在客户端处理。你不能那样做。

标签: php html .htaccess mod-rewrite


【解决方案1】:

URL 片段(#bit)不会发送到服务器(或者至少不应该发送)。您的浏览器发送一个正常的 GET 请求,减去 #bit。当收到页面响应并呈现页面时,您的浏览器会自动滚动到该 ID。所以你的方案行不通。

另外,我很确定您没有正确使用 ReWrite。据我了解,这用于将请求的资产映射到某个物理磁盘位置,它不会发出重定向。

编辑: ReWrite 可以用于根据@Hakre 下面的评论发出带有 [R] 标志的重定向。所以在这种情况下,你想从 /page/six 重定向到 /page#six,如果我猜应该可以,它提供的 Apache 不会阻塞 #six。

【讨论】:

  • +1 以获得正确的解释。仅供参考:[R] 确实会发出重定向,这是您可以与 ModRewrite 一起使用的标志。
  • @hakre,当然可以。所以也许他的想法可以与 [R] 一起使用?
  • 可以重定向到包含 url 片段的 url,但不能在 redirectcond 语句中使用一个。但是,包含片段的内部子请求有些愚蠢,而且肯定是无用的。
【解决方案2】:

您的重写规则缺少R 标志(重定向),正如@hakre 在@Richard 的答案中的cmets 中指出的那样。但是你还需要包含NE 标志(不能转义),否则井号会被翻译成%23,这将无法按预期工作。

RewriteRule ^page/six /page.php#six [R,NE,QSA,L]

【讨论】:

    【解决方案3】:

    StackOverflow 上有另一篇与您的场景类似的文章可能会有所帮助: .htaccess redirect with fragment

    我现在不在服务器前,因此无法对此进行测试,但链接的文章可能会对任一方向的事情有所了解。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多