我发现导致.htaccess
重写规则集的主要原因之一就是做出看似奇怪的事情,那就是当Apache决定尝试在子请求中应用它们时。这是我现在总是在我的规则上使用[NS]
标志或使用前缀规则
RewriteCond %{IS_SUBREQ}%{ENV:END} t|1 [NC]
RewriteRule ^ - [L]
(%{ENV:END}位只允许我使用E = END:1与V2.4 END标志相同。)
我的问题是:任何人都可以给我一个很好的用例,我不想这样做吗?(或者我想要使用特殊的 -U 或 -F 条件模式)。
我意识到可能有许多我没有想到的,但是A勾号是第一个有效的。
答案 0 :(得分:2)
我猜你想要将重写规则应用于子请求的典型情况与你在文档根目录中使用符号链接的情况大致相同。
对于一个看似合理的例子,假设您正在使用服务器端包含,并且有大量文件散布在诸如.html
,.shtml
和.htm
之类的后缀中,也许还有一些这些的大写变体也是如此。在某些时候,您决定对.html
后缀进行标准化,并相应地重命名所有文件。但是你仍然有一堆遗留代码和使用其他后缀的链接,并且将它们全部生根需要一段时间。
在这种情况下,您可能需要这样的重写规则:
RewriteRule ^(.*)\.s?html?$ $1.html [NC]
通过将此应用于子请求,您可以确保您的服务器端包含不会因重命名而中断。