【问题标题】:How to match subdirectories in RewriteCond?如何匹配 RewriteCond 中的子目录?
【发布时间】:2010-09-17 01:28:15
【问题描述】:

在 RewriteCond 的正则表达式上遇到问题

RewriteCond %{REQUEST_URI} !^/foo/

按预期工作,也就是说,不会对所有以 /foo/ 开头的 URL 进行以下重写。

RewriteCond %{REQUEST_URI} !^/foo/bar/

另一方面,它不像我预期的那样工作。以 /foo/bar/ 开头的 URL 仍在被重写。

如何输入正确的正则表达式来排除子目录?

【问题讨论】:

  • 实际的规则是什么样子的?
  • 它应该可以工作。您能否设置一个 RewriteLogLevel 至少为 3 的 RewriteLog 并将其添加到您的问题中?

标签: regex mod-rewrite


【解决方案1】:

可能是应用规则的内部重定向的新 URL。 L flag 就是这样做的。

[...] 如果RewriteRule 生成内部重定向(在每个目录上下文中重写时经常发生),这将重新注入请求并导致从第一个RewriteRule 开始重复处理。

如果您想确保初始 URL 路径不是以“/foo/bar”开头,请改为检查request line(请参阅THE_REQUEST variable):

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/
RewriteRule …

【讨论】:

  • @Gumbo:您能否准确解释一下您在建议中使用的正则表达式?它也适用于我,我猜它匹配第一个 GET,但无法理解后面的 '/' 以及 '/foo/bar/' 之前没有域的原因
  • @Stratboy 我希望链接页面能解释一切。好吧,模式^[A-Z]+\ /foo/bar/ 检查服务器的 HTTP 解析器所看到的 HTTP 请求行,并且仅当模式不匹配时条件才为真。也许是 \ 让你分心,但这仍然是模式的一部分。
  • 哇-不知道为什么 %{REQUEST_URI} 对我来说失败了-但是您的解决方案正在运行。谢谢!
猜你喜欢
  • 2015-06-07
  • 2010-11-08
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多