【问题标题】:htaccess redirect url with anchor taghtaccess 带有锚标记的重定向 url
【发布时间】:2017-01-26 09:41:42
【问题描述】:

我正在尝试将 URL 重定向到带有锚标记的页面。重定向有效,但是如何在重定向后保留原始 URL 而不是重定向的 URL。

我想将www.example.com/caves/ 重定向到www.example.com/trips.html#caves

当我重定向时,我得到了 URL www.example.com/trips.html#caves,但希望它保留 www.example.com/caves/

我花了很长时间寻找答案,但没有运气,任何帮助将不胜感激

这是我在 htaccess 中的代码

RewriteEngine on

RewriteRule ^Caves/(.*) /trips.html#Caves [NE,L,R]

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    我怀疑它可以做到。 Anchor 是一个客户端指令,你不能用服务器端重写“隐藏”它(如果没有看到,浏览器就不能跳转到锚点),所以锚点必须在地址栏 URL 中。

    【讨论】:

    • 在这种情况下使用术语“锚标记”似乎有点用词不当。 OP 已经“成功”重定向到实际 URL(在锚标记中使用所需的 URL),但他们要求重定向是“隐藏的”,即。 内部重写 - 这通常是可能的。但是,在这种情况下需要注意的是片段标识符,它不会在内部重写中传递。
    【解决方案2】:

    ...如何在重定向后保留原始 URL 而不是重定向后的 URL。

    您需要 内部重写,而不是 外部重定向 - 这是您当前使用 R(重定向)标志所做的RewriteRule

    RewriteRule ^Caves/(.*) /trips.html#Caves [NE,L,R]
    

    通常您可以简单地删除R 标志以将原始URL 保留在地址栏中。该请求被内部重写/trips.html

    但是,片段标识符(即#Caves - 或者严格来说是在# 之后 的所有内容)都丢失了。请求被重写为/trips.html,而不是/trips.html#Caves。片段标识符由客户端评估,而不是服务器评估,毫无疑问,您的客户端 JavaScript 会使用片段标识符来显示适当的内容。由于内部重写,客户端 JavaScript 永远无法看到片段标识符。

    但是,如果您在内部重写请求(即/Caves/ 仍然存在于地址栏中),那么您的客户端代码不需要#Caves 片段标识符。它可以简单地查看原始 URL,即。 /Caves/ 代替。但这需要对您的客户端代码进行一些小改动。

    (Aside... 请注意,您在代码中使用 Caves(大写首字母),但在说明中引用 caves(全部小写)。您拥有的指令写是区分大小写的,所以在你的描述中应该是/Caves/,而不是/caves/?)

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2017-10-30
      • 2013-09-18
      相关资源
      最近更新 更多