需要在 htaccess 中重写 URL contain # 标签

Need to rewrite URL contain # tag in htaccess

我需要在 .htaccess 中重写 URL?下面是我的问题的描述。

URL: www.example.com/about.php#vision

需要重写为:www.example.com/vison.html

我尝试了下面提到的方法,但它不起作用

RewriteRule ^vison.html$ about.php#vision [L]
RewriteRule ^our-vision.html(.*)$ about.php [L,NC] 

简短的回答是:使用 .htaccess 根本不可能!

更长的答案:

# 字符后的部分不会从浏览器发送到 Web 服务器,因为它仅在客户端使用。

这种类型的 "rewriting" 必须使用客户端 JavaScript。

hashchange 事件可能是您的起点:

window.addEventListener('hashchange', function() {
    var hash = location.hash.substr(1);
    window.location.href = "/" + hash + ".html";
});

您还应该查看 SPA (单页应用程序)。有很多框架可以帮助您构建此类解决方案。此外,还有更多不依赖哈希的现代技术,例如 popstate 事件及其相关机制。

一些可以帮助您入门的框架:

更新

在查看您当前的 .htaccess 设置时,您似乎想要做与您的问题文本暗示相反的事情 - 当有人请求 vison.html ,您想将它们重定向到 about.php#vision - 而 而不是相反 .

如果这是真的,那么是的,您可以通过添加 R 标志 (REDIRECT)NE 使用 .htaccess 来实现标记 (NO ESCAPE) 以防止 # 字符被编码:

RewriteRule ^vison.html$ about.php#vision [NE,R,L]