从没有散列的 URL 重定向到有散列的 URL

Redirect from a URL without a hash to a URL with a hash

在 Apache 上,我想使用 .htaccess 创建 URL 重定向规则。

预期传入URL将根据以下模式形成:

[PROTOCOL]://[domain name]/i/[INTEGER]/[INTEGER]/[STRING]

我希望将上面的URL重定向,这样现在URL中就有了一个hash,如下:

[PROTOCOL]://[domain name]/i/#/[INTEGER]/[INTEGER]/[STRING]

例子

我想去...

来自:

https://example.com/i/92/17/abcdef

对此:

https://example.com/i/#/92/17/abcdef

重要提示: 浏览器不得去除重定向 URL 中的散列。 我需要那个哈希值。

我为什么要这样做?因为原始传入 URLs(没有哈希)的路由实际上并不存在。我需要 javascript 检查散列后出现的项目,并使用它们从浏览器向 API 服务器发出提取请求。这是必要的,因为我的主机上只有静态 HTML 文件。我还想要一个不包含主题标签的美观的传入 URL(即使它将被重定向到带有主题标签的 URL)。

问题是,如何使用位于 https://example.com/i/ 子目录中的 .htaccess 文件实现此目的?

使用 /i 子目录中 .htaccess 文件顶部的 mod_rewrite:

RewriteEngine On

RewriteRule ^\d+/\d+/[^/]+$ /i/#/[=10=] [NE,R=302,L]

由于 .htaccess 文件位于 /i 子目录中,因此 RewriteRule 模式 (第一个参数)与 [INTEGER]/[INTEGER]/[STRING] URL-path 的一部分(即相对于包含 .htaccess 文件的目录)。

[=18=] 反向引用包含与 RewrietRule 模式 .

匹配的整个 URL-path

需要 NE 标志以防止 # 在重定向响应中成为 URL-encoded(如 %23)。

参考: