查询字符串的 url 重写问题

发布于 2024-11-03 15:45:24 字数 610 浏览 1 评论 0 原文

我正在尝试重写网址,例如 http://www.url.com/blog/?p =123http://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 是否包含博客?

I'm trying to rewrite urls like http://www.url.com/blog/?p=123 to http://www.url.com/#blog/123. I've read up on things and found that you can only parse the query string in the RewriteCond so I tried something like:

RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
RewriteRule ^.*$ /#blog/%0 [NE,R]

When I try this the urls end up being rewritten to:

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

Any ideas how to do this properly? Also, is there a way to add an additional RewriteCond that checks that the REQUEST_URI contains blog?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初见 2024-11-10 15:45:24

您可以通过完全删除查询字符串来完成此操作:

RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
RewriteRule ^.*$ /#blog/%1? [NE,R]

这应该为您提供:

http://www.url.com/#blog/213

如果您想检查 URL 是否包含术语“blog”,则只需检查:

RewriteCond %{REQUEST_URI} .*/blog/.*

重要的是要注意,您将无法检查“blog” ” 在像 http://www.url.com/#blog 这样的链接中,因为正如 Patrick 所指出的,# 之后的所有内容都不会发送到服务器。

有关详细信息,请参阅 有关 mod_rewrite 的 Apache wiki

You can do this by removing the query string entirely:

RewriteCond %{QUERY_STRING} ^p=([0-9]*)$
RewriteRule ^.*$ /#blog/%1? [NE,R]

This should give you:

http://www.url.com/#blog/213

If you want to check if the URL contains the term "blog" then simply check:

RewriteCond %{REQUEST_URI} .*/blog/.*

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.

失退 2024-11-10 15:45:24

这可能不起作用,因为浏览器不会在请求中发送哈希 (#) 之后的 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.

墨落画卷 2024-11-10 15:45:24

在您的 .htaccess 文件中尝试此规则:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^blog/?$ /#blog/%1? [NC,NE,L,R]

上面的 URL http://localhost/blog/?p=1234 将变为 http://localhost/#blog/1234代码>

Try this rule in your .htaccess file:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{QUERY_STRING} ^p=(.*)$ [NC]
RewriteRule ^blog/?$ /#blog/%1? [NC,NE,L,R]

With above a URL of http://localhost/blog/?p=1234 will become http://localhost/#blog/1234

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文