【问题标题】:.htaccess rule ignored when % mark is present存在 % 标记时忽略 .htaccess 规则
【发布时间】:2013-12-21 02:54:49
【问题描述】:

我有以下重写规则:

RewriteRule ^places/([^/]+)$ PlaceD.php?LF=F&LFC=Place&PlaceID=$1

但是当我按如下方式调用 URL 时(当有 % 标记时)它会被忽略:

http://mydomain/places/sri-maha-bhodi-%2F-bodiya

但以下作品(没有 % 标记):

http://mydomain/places/sri-maha-bhodi-2F-bodiya

请问我应该如何更改重写规则?

【问题讨论】:

  • %2F 确实是个大问题,尽量避免出现在url中。要解决这个问题,请在 httpd.conf 中添加“AllowEncodedSlashes on”(不在 .htaccess 中),并在 RewriteRule 中将 ([^/]+) 更改为 (.+)。
  • @Andrew 的评论非常有用,但出于安全原因,最好使用AllowEncodedSlashes NoDecodeRead more about it here

标签: apache .htaccess mod-rewrite


【解决方案1】:

Apache 可能正在对 %2F 进行编码,这与 RewriteRule 不匹配。这里发生了一些事情,但基本是不允许在 url 中编码传递正斜杠。为了完成这项工作,您需要设置AllowEncodedSlashes NoDecode。这不能在 .htaccess 文件中完成,必须在配置中完成。您可能还需要在重写规则中设置另一个标志。

RewriteRule ^places/([^/]+)$ PlaceD.php?LF=F&LFC=Place&PlaceID=$1 [B]

来源:
Rewrite rule & escaping (encoded) forward slashes within URL
AllowEncodedSlashes Directive
B (escape backreferences)

【讨论】:

  • 您好,感谢您的回复。但它不起作用:(请有其他建议吗?
  • 添加了附加信息和可能的另一种处理方式。可悲的是,如果您无法更新配置文件,您可能无法处理编码的正斜杠。
  • 非常感谢您的更新和时间。但遗憾的是我无法更新配置文件。所以我最终删除了地名中的所有正斜杠。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2014-12-11
  • 2019-03-13
  • 1970-01-01
  • 2015-12-21
  • 2017-05-03
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多