在每个目录上下文中重写规则
每个目录上下文是 <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-name
,RewriteRule
的第一个参数将与 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 ^/
开头的指令永远不会匹配任何东西。