0

我真的有一个用 PHP 编写的简单网站,我刚刚将它改写成一个单页 HTML 解决方案(使用#-sections)。

现在我想将旧查询字符串映射到新的基于哈希的 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什么?

4

2 回答 2

1

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

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

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

于 2012-04-10T14:15:16.787 回答
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

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

再见

于 2015-05-13T19:18:31.707 回答