url重写查询字符串的问题

时间:2011-04-28 20:45:12

标签: .htaccess

我正在尝试将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]

当我尝试这个时,网址最终被重写为:

  

http://www.url.com/#blog/p=213?p=213

任何想法如何正确地做到这一点?另外,有没有办法添加额外的RewriteCond来检查REQUEST_URI是否包含博客?

3 个答案:

答案 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