我真的是一个用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
的唯一可能性是什么?
答案 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打开图表时,这是迄今为止最好的解决方案。
再见