我正在尝试将http://www.url.com/blog/?p=123等网址重写为http://www.url.com/#blog/123。我已经阅读了一些内容,发现你只能在RewriteCond中解析查询字符串,所以我尝试了类似的东西:
RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
RewriteRule ^.*$ /#blog/%0 [NE,R]
当我尝试这个时,网址最终被重写为:
任何想法如何正确地做到这一点?另外,有没有办法添加额外的RewriteCond来检查REQUEST_URI
是否包含博客?
答案 0 :(得分:0)
这可能不起作用,因为浏览器不会在请求的哈希(#)之后发送网址的片段,因此对http://www.url.com/#blog/p=213?p=213的任何请求都将是对http://www.url.com/的请求
哈希片段应该用于页面上的锚标记,并且永远不会发送到服务器。
答案 1 :(得分:0)
您可以通过完全删除查询字符串来完成此操作:
RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
RewriteRule ^.*$ /#blog/%1? [NE,R]
这应该给你:
http://www.url.com/#blog/213
如果您想检查网址是否包含“博客”这一术语,请点击:
RewriteCond %{REQUEST_URI} .*/blog/.*
请务必注意,您无法在http://www.url.com/#blog
等链接中查看“博客”,因为正如Patrick所述,#
之后的所有内容都未发送到服务器。
有关详细信息,请参阅Apache wiki on mod_rewrite。
答案 2 :(得分:0)
在.htaccess文件中尝试此规则:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^blog/?$ /#blog/%1? [NC,NE,L,R]
上面的http://localhost/blog/?p=1234
网址将变为http://localhost/#blog/1234