.htaccess重定向手动将查询字符串映射到哈希

.htaccess重定向手动将查询字符串映射到哈希,.htaccess,redirect,.htaccess,Redirect,我有一个用PHP编写的简单网站,我刚刚将其改写成一个只包含HTML的单页解决方案(使用-sections) 现在,我想将旧的查询字符串映射到新的基于哈希的URL。这意味着,例如?id=itemA应该变成#newandimprovedetema(旧的id与新的散列不同,但由于只有四个可能的值,我想手动映射它们应该不会太多工作)。显然,这不是一个简单的重定向,但据我所知,我必须使用重写规则。不幸的是,我根本没有这方面的经验,所以我还没能想出任何能正常工作的方法 目前我正在使用: RewriteEng

我有一个用PHP编写的简单网站,我刚刚将其改写成一个只包含HTML的单页解决方案(使用
-sections)

现在,我想将旧的查询字符串映射到新的基于哈希的URL。这意味着,例如
?id=itemA
应该变成
#newandimprovedetema
(旧的id与新的散列不同,但由于只有四个可能的值,我想手动映射它们应该不会太多工作)。显然,这不是一个简单的重定向,但据我所知,我必须使用重写规则。不幸的是,我根本没有这方面的经验,所以我还没能想出任何能正常工作的方法

目前我正在使用:

RewriteEngine on
RewriteCond %{QUERY_STRING}  ^id=itemA$
RewriteRule ^index.php$ /#newAndImprovedItemA [L]
这会将我重定向到新的
index.html
,但不会添加哈希。老实说,我对代码应该做什么没有太多的线索,所以这可能有点离题(在这种情况下请容忍我),但不幸的是,我无法理解人们在其他帖子中就这个主题写了什么


index.php?id=itemA
映射到
#newandimprovedetema

哈希纯粹是客户端操作。您的重写只是执行一个仅限Apache内部的重定向,根本不会影响客户端。您必须强制执行全面的HTTP 30x重定向,例如:

RewriteRule ^index.php$ /#newAndImprovedItemA [L,301]
                                                ^^^^

这将通过客户进行往返。这样做的缺点是,它将花费您另一个HTTP请求周期,并更改用户地址栏中的地址。

我已经用这个htaccess代码解决了这个问题(有点脏,但效果很好):

“/test2”仅适用于本地wamp测试域pourpose

示例结果:

http://localhost/test2/111 --> http://localhost/test2/?111#111
http://localhost/test2/111/ --> http://localhost/test2/?111#111
http://localhost/test2/111/222 --> http://localhost/test2/?111/222#111/222
http://localhost/test2/111/222/ --> http://localhost/test2/?111/222#111/222
希望这能有所帮助,因为我需要几个小时才能找到解决方案。当使用一个#站点并想要facebook open graph时,这是迄今为止最好的解决方案


再见

事实上,我想要一个重定向,因为我实际上是在提供新的(修改过的)内容,我只想照顾人们(和谷歌)链接到旧的URL。此外,我发现我必须使用
[L,301,NE]
(即非转义模式),这样
符号就不会变成
%23
http://localhost/test2/111 --> http://localhost/test2/?111#111
http://localhost/test2/111/ --> http://localhost/test2/?111#111
http://localhost/test2/111/222 --> http://localhost/test2/?111/222#111/222
http://localhost/test2/111/222/ --> http://localhost/test2/?111/222#111/222