Apache .htaccess 重定向到锚点

Apache .htaccess redirect to an anchor

我正在尝试对网站页面上的锚点进行一次性损害限制重定向。一个错误的 URL 在一些宣传 material 上发表了,像这样:

https://mydomain.org.uk/A/B

当我真正想发布的是

https://mydomain.org.uk/A#B

看过其他一些答案后,似乎任何带有锚点的重定向都需要是绝对的 URL。所以我把它放在我的 .htaccess 中:

RewriteRule A/B https://mydomain.org.uk/A.php#B [NE,L]

(注意,.php 是正确的,A.php 是页面文件)。而且它根本不起作用。浏览器只是加载 A.php 并从顶部显示它。

我知道规则模式是匹配的,因为如果我将目标设置为一个完全不存在的页面,我会得到预期的 404。

不幸的是,我的网络托管服务不允许我使用 Apache 日志,因此很难追踪问题所在。谁能指导我如何正确重写,以便我将#anchor 一直传递到用户的浏览器?

提前致谢!

当服务器处理 RewriteRule 时,它基本上会在内部更改要访问的资源,而浏览器不会注意到。

在浏览器中更改 URL 的唯一方法是使用重定向标志。这将使网络服务器发送带有 Location header 的 HTTP 302 响应,然后将导致浏览器更改 URL 并请求新页面。这个新的 URL 可以包含一个锚点。

在您的情况下,以下规则应该有效:

RewriteRule A/B https://mydomain.org.uk/A.php#B [NE,R,L]

请记住,锚点是一种浏览器功能,因此它们通常不会发送到服务器,因此既不会出现在访问日志中,也不会在 RewriteRule 中使用。