如何将example.com/index.php#anchor的URL重写为example.com/anchor?

时间:2014-11-07 23:46:15

标签: php .htaccess rewrite

我有一个页面( example.com ),主要部分有锚点( example.com/index.php#anchor example.com/index .php#about example.com/index.php#contact 等)以及子页面( example.com/subpage.php )。

这是 .htaccess 文件:

RewriteEngine On

DirectoryIndex index.php
ErrorDocument 404 http://example.com/my404page.php

RewriteRule ^anchor/?$ index.php#anchor [R,NE,L]
RewriteRule ^subpage/?$ subpage.php [NE,L]

子网页重写规则很有效。

对于锚链接,包括" R " (重定向)标记将URL更改为 example.com/index.php#anchor ,但我希望该网址为 example.com/anchor

如果我删除 R 标记并在我的浏览器中输入 example.com/anchor ,那么它将转到索引页面并保留干净的URL(example.com / anchor)但不会滚动到锚点

那么......有没有办法在.htaccess中实现这一点,或者有一种很好的方法可以通过JavaScript实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

使用网址重写无法做到这一点。因为浏览器在#是URL的一部分时向下滚动...而不是在服务器端。

答案 1 :(得分:0)

您无法使用.htaccess执行此操作。但是您可以使用以下JavaScript代码来做到这一点:

window.location = String.prototype.replace(window.location, /index\.php#(.*)/, function(match, g1){return g1;});