我希望我的.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]
这些评论的行也进行了测试,但没有成功。这些线条什么都不做。如何获得正确的重定向?
由于
答案 0 :(得分:0)
锚点(例如#body)在客户端处理,而不是在服务器端处理。因此,mod_rewrite无法将#body锚添加到url
答案 1 :(得分:0)
你不需要匹配RewriteRule模式中的前导斜杠如果你在htaccess文件上测试这些规则,那么删除前导斜杠。
RewriteRule ^onepage/?$ /onepage#body [NE,R,L]
但是,上面的规则仍然不正确,因为目标网址和模式是不同的,它会导致重定向循环。
要解决此问题,您需要为网址分配额外的路径段
规则:
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]