【问题标题】:'hash' url rewrite in .htaccess.htaccess 中的“哈希”url 重写
【发布时间】:2013-02-14 11:53:45
【问题描述】:

我想用http://example.com/articles/first-article重写http://example.com/articles.html#first-article

可以重写吗?

我尝试使用以下方法,但对我不起作用:

RewriteRule ^articles/(.+)$ /articles\.html\#$1

【问题讨论】:

  • 正如@fab 回答的那样,片段没有发送到服务器。您可以设置一个包罗万象的页面并使用 JavaScript 进行重定向。
  • @Bouke:错误/请阅读Apache documentation
  • @BoReth 实际上与 Apache 没有任何关系。另见stackoverflow.com/questions/3067491/…。重申;服务器无权访问锚点,因此无法在重写规则中使用锚点。
  • @Bouke:嗯,它与 Apache 有很大关系,因为它是关于 REDIRECTING。例如,如果 "httpd.conf" 或 ".htacces" 中存在带有 RewriteRule . /Dir1/Dir2/#ApacheAnchor [NE,R=301,L] 的重写规则,则 SERVER 确实会重定向到该 URL,并且 RESPONSE HEADER 将包含以下内容: “位置:mydomain/Dir1/Dir2/#ApacheAnchor”。因此,在我看来,声称永远不会将 ANCHOR 或片段发送到服务器是不准确的。
  • @BoReth 您将发送数据服务器与接收数据服务器混淆了。问题是关于基于从客户端收到的标头的服务器端重定向。

标签: .htaccess mod-rewrite


【解决方案1】:

# 可以添加到带有 NE 标志的替换 URL 中。检查:

所以,你可以试试这个:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  !articles\.html      [NC]
RewriteCond %{REQUEST_URI}  ^/articles/([^/]+)/? [NC]
RewriteRule .*       /articles.html#%1           [R,NE,L]

重定向

http://example.com/articles/parameter

http://example.com/articles.html#parameter

字符串articles 假定为固定,而parameter 假定为可变。

【讨论】:

  • 重定向锚不是问题。
  • 这不能回答这个问题,但很有用
  • 类似的问题我无法解决。 stackoverflow.com/questions/31859377/…
  • 重定向到锚点是个问题。标题为:'hash' url rewrite in .htaccess,其中HASH表示ANCHOR。问题中的示例是:RewriteRule ^articles/(.+)$ /articles\.html\#$1。由于示例的目标 URL 中有一个 ANCHOR (#),因此问题显然是在寻求一种重定向到 ANCHOR 的方法。现在,这个答案很重要,因为它澄清了常见的误解,即 ANCHOR 永远不会“......被发送到服务器”,这与 Apache documentation 相反。
【解决方案2】:

不,这是不可能的。 URL 片段(从# 开始的所有内容)甚至都不会发送到服务器。

也许您想考虑一个基于 JavaScript 的解决方案,其中实际内容将通过依赖于片段的 AJAX 加载。您将在此处找到有关此方法的一些有用信息:What's the shebang/hashbang (#!) in Facebook and new Twitter URLs for?

【讨论】:

  • 这应该被取消选择为正确答案,因为它不正确。 @faa 下面的回答实际上是正确的。
  • 取决于问题。 @faa 的答案是正确的,但它并没有解决原始发布者的问题。
  • 好点,我第一次读的时候有点累,我的坏。
  • 问题要求找到一种方法来删除“#”字符(Apache 称为 ANCHOR)。您说“不,这是不可能的”和“重定向到锚点不是问题”。那么,为什么要在第一行回答呢?您还说:“URL 片段(从 # 开始的所有内容)甚至都不会发送到服务器。”在我看来,完全错误。如 Apache 文档中所述,“URL 片段”在未转义时确实是 sent。我自己试过了,除非 Apache 是错误的并且你是对的,否则你的陈述是不准确的。 @Alameda answer 确实回答了这个问题,恕我直言。
  • 这不是答案。这只是一个错误的建议,但它有很多赞成票(?)。事实上,这种说法是错误的:“不,这不可能。URL 片段(从 # 开始的所有内容)甚至都没有发送到服务器。”当然这是可能的。请阅读 Apache 文档。我同意@designermonkey。目前不能投票,但当我获得所需的声誉时,我会投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多