通过.htaccess将锚添加到网址

时间:2016-03-29 23:50:50

标签: apache .htaccess mod-rewrite

我希望我的.htaccess文件能够像这样转换网址:

http://localhost/onepage/

进入这样的网址:

http://localhost/onepage/#body

因此必须在网址中添加#body后缀。

Apache版本是2.4。重写模块已启用并正常工作。

。正在解析.Htaccess文件并将其本地化在index.php文件的目录中。

80端口上没有任何虚拟主机。我在Windows上使用xampp。

我试过这样的代码行:

    RewriteEngine On
    RewriteRule ^/onepage/ /onepage/#body  [NE,R]

    #RewriteRule ^/onepage /onepage/#body  [NE,R]
    #RewriteRule ^/onepage/$ /onepage/#body  [NE,R]
    #RewriteRule "^/onepage/$" /onepage/#body  [NE,R]
    #RewriteRule /?onepage/? /onepage/#body  [NE,R]
    #RewriteRule ^/?onepage/? /onepage/#body  [NE,R]
    #RewriteRule ^/?onepage/?$ /onepage/#body  [NE,R]

这些评论的行也进行了测试,但没有成功。这些线条什么都不做。如何获得正确的重定向?

由于

3 个答案:

答案 0 :(得分:0)

锚点(例如#body)在客户端处理,而不是在服务器端处理。因此,mod_rewrite无法将#body锚添加到url

答案 1 :(得分:0)

你不需要匹配RewriteRule模式中的前导斜杠如果你在htaccess文件上测试这些规则,那么删除前导斜杠。

RewriteRule ^onepage/?$ /onepage#body [NE,R,L]

但是,上面的规则仍然不正确,因为目标网址和模式是不同的,它会导致重定向循环。

要解决此问题,您需要为网址分配额外的路径段

  • / onepage /体/

规则:

RewriteEngine on
RewriteRule ^onepage/body/?$ /onepage#body [NE,R,L]

现在,您可以轻松地将http://example.com/onepage/body重定向到http://example.com/onepage#body

答案 2 :(得分:0)

我的解决方案是:

<强>的.htaccess

#adding query string to prevent looping so RewriteCond lets rewrite only at the first time since there is not "anchor" query string.

RewriteEngine On
RewriteBase "/"
RewriteCond "%{QUERY_STRING}" !anchor
RewriteRule ^onepage/? /onepage/?anchor#body [QSA,NE,R=301]