查询字符串的 url 重写问题
我正在尝试重写网址,例如 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
是否包含博客?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以通过完全删除查询字符串来完成此操作:
这应该为您提供:
如果您想检查 URL 是否包含术语“blog”,则只需检查:
重要的是要注意,您将无法检查“blog” ” 在像
http://www.url.com/#blog
这样的链接中,因为正如 Patrick 所指出的,#
之后的所有内容都不会发送到服务器。有关详细信息,请参阅 有关 mod_rewrite 的 Apache wiki。
You can do this by removing the query string entirely:
This should give you:
If you want to check if the URL contains the term "blog" then simply check:
It is important to note that you will not be able to check for "blog" in links like
http://www.url.com/#blog
because, as noted by Patrick, everything after the#
is not sent to the server.See the Apache wiki on mod_rewrite for more information.
这可能不起作用,因为浏览器不会在请求中发送哈希 (#) 之后的 url 片段,因此任何对 http://www.url.com/#blog/p=213?p=213 将是对 http://www.url.com/
哈希片段应该用于页面上的锚标记,并且永远不会发送到服务器。
That may not work because browsers do not send the fragment of the url after the hash (#) with the request, so any request for http://www.url.com/#blog/p=213?p=213 will be a request for http://www.url.com/
The hash fragment is supposed to be used for anchor tags on pages, and is never sent to the server.
在您的 .htaccess 文件中尝试此规则:
上面的 URL
http://localhost/blog/?p=1234
将变为http://localhost/#blog/1234
代码>Try this rule in your .htaccess file:
With above a URL of
http://localhost/blog/?p=1234
will becomehttp://localhost/#blog/1234