在每个目录上下文中重写规则

每个目录上下文是 <Directory></Directory> 标记之间的静态配置文件的一部分。动态配置文件的全部内容位于 .htaccess 所在的文件夹的每个目录上下文中。

每个目录上下文中的 RewriteRule 与它们所在目录的协议,主机名,端口和前缀之后以及查询字符串之前的 url 部分匹配。

在静态配置文件中

当在 url http://example.com/foo?id=1 上使用以下规则时,RewriteRule 的第一个参数中的正则表达式与 foo 匹配。删除协议(http),主机名(example.com)和此目录的前缀(/)。另一方面,查询字符串(?id=1)也被删除。

<Directory "/">
  RewriteRule ^foo$ bar [L]
</Directory>

在下面的示例中,使用 url http://example.com/topic/15-my-topic-nameRewriteRule 的第一个参数将与 topic/15-my-topic-name 匹配:

<Directory "/topic/">
  RewriteRule ^topic/([0-9]+)-[^/]*/?$ topics.php?id=$1 [L]
</Directory>

在动态配置文件中

当以下规则放在 www-root 文件夹中的 .htaccess 文件中,然后在 url http://example.com/foo?id=1 上使用时,第一个正则表达式与 foo 匹配。

RewriteRule ^foo$ bar [L]

在每个目录上下文中,匹配的 URL 永远不会/开头。在这样的背景下,以 RewriteRule ^/开头的指令永远不会匹配任何东西。