如何重写包含 %23 的 URL?
Posted
技术标签:
【中文标题】如何重写包含 %23 的 URL?【英文标题】:How to rewrite a URL with %23 in it? 【发布时间】:2011-01-27 04:00:04 【问题描述】:我有一个(wordpress)博客,在用户发表评论后,用户会被重定向回页面,并带有一个指向他们评论的锚点。应该是这样的:
http://example.org/foo-bar/#comment-570630
但不知何故,我的日志文件中包含大量此类 URL 的 404:
http://example.org/foo-bar/%23comment-570630
有没有办法编写 .htaccess 重写规则来解决这个问题?
奖金问题: 知道为什么会发生这种情况以及我能做些什么吗?
【问题讨论】:
@Gumbo:使用 302 Found 重定向。生成的标题如下所示:“Location: /foo-bar/#comment-571738” 你能贴出这样的代码吗? @Gumbo:不是真的,因为它深埋在 Wordpress 核心中。在 99.99% 的情况下它也有效,而且它不是一个被广泛报道的 Wordpress 问题,所以我认为这是一个死胡同。 【参考方案1】:%23
是#
的 URL 编码表示。我怀疑你的重写规则不会满足%23
。您应该调查响应是如何构建的。具体来说,任何 URL 编码函数。
但是,可以使用重写规则来解决您的问题。了解您将在提交评论后向客户返回两个回复。这就是为什么最好更正第一个响应的原因。
# http://example.org/foo-bar/%23comment-570630 -> http://example.org/foo-bar/#comment-570630
RewriteCond %REQUEST_URI %23comment-\d+$
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [R=301]
它未经测试,但应该可以工作(我不确定是否要转义 \%
,因为它在 mod_rewrite 中具有特殊含义)。
【讨论】:
问题是我可以测试的所有系统上的响应都很好。它是 URL 中的 # 并且重定向有效,我不知道这会在哪里以及为什么会中断。 对你的重写规则:不起作用。 request_uri 的匹配好像不起作用,这也是我卡住的地方,也来这里问问。RewriteCond
不满意?您是否尝试过转义百分比字符?
是的。我做的第一件事。我还尝试使用此在线测试器 civilolydnad.se/projects/rewriterule 改进 RewriteRule 并使其成为 (.+)\/\%23comment-(.+)$ http://host/$1/#comment-$2 [R=301]
,但这在我的服务器上也不起作用。很奇怪。【参考方案2】:
你试过B Flag吗?
RewriteCond %REQUEST_URI %23comment-\d+$
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [B,R=301]
未经您的具体案例测试,但用于相关问题。
【讨论】:
这个答案是为那些在谷歌上搜索这个完全相同的问题的人准备的……为恢复这个封闭的旧线程而道歉以上是关于如何重写包含 %23 的 URL?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在经典 asp 中进行友好的 url(url 重写)?
如何在 libre office 中设置 URL 编码的超链接?