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

时间:2012-04-10 14:11:34

标签: .htaccess redirect

我真的是一个用PHP编写的简单网站,我刚刚将其重写为单页HTML解决方案(使用# - 部分)。

现在我想将旧的查询字符串映射到新的基于散列的URL。这意味着例如?id=itemA应该变为#newAndImprovedItemA(旧的ID与新的哈希值不同,但由于只有四个可能的值,因此手动操作不应该太多我想他们的地图。显然这不适用于简单的RedirectPermanent,但据我所知,我必须使用RewriteRules。不幸的是,我根本没有任何经验,所以我无法想出任何正常工作的东西。

目前我正在使用:

RewriteEngine on
RewriteCond %{QUERY_STRING}  ^id=itemA$
RewriteRule ^index.php$ /#newAndImprovedItemA [L]

会将我重定向到新的index.html,但不会添加哈希值。老实说,我没有太多线索该代码应该做什么,所以它可能会离开(在这种情况下忍受我),但遗憾的是我无法理解人们在其他帖子中写的是什么那个话题。

index.php?id=itemA映射到#newAndImprovedItemA的唯一可能性是什么?

2 个答案:

答案 0 :(得分:1)

哈希是纯粹的客户端操作。您的重写仅执行Apache内部重定向,而不会影响客户端。您必须强制执行完整的HTTP 30x重定向,例如

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

将往返于客户端。这样做的缺点是它会花费你另一个HTTP请求周期,并更改用户地址栏中的地址。

答案 1 :(得分:1)

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !\.(?i)(jpg|png|gif|xml|json|css|js|php|html|htm)$
RewriteRule ^([^/]*)($|/)$ /test2/?$1#$1 [R,NE,L]
RewriteRule ^([^/]*)/([^/]*)($|/)$ /test2/?$1/$2#$1/$2 [R,NE,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)($|/)$ /test2/?$1/$2/$3#$1/$2/$3 [R,NE,L]

" / 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

希望这有帮助,因为我需要几个小时才能找到解决方案。当使用#site并希望facebook打开图表时,这是迄今为止最好的解决方案。

再见