如何在现有.htaccess Rewrite规则中添加忽略重写的规则?
如何在现有.htaccess中添加指定内容的重写排除规则
嘿,没问题!要让指定内容跳过这些重写规则,你只需要在现有规则的最前面(RewriteEngine on之后)添加一条跳过重写的规则就行。具体操作分两种常见场景:
场景1:排除某个目录(比如/static/下的所有内容)
如果是想让某个目录下的所有文件/子目录都直接访问,不用走后续重写,你可以加这条规则:
RewriteRule ^static/ - [L]
这里的^static/是匹配以static/开头的请求,-表示不做任何重写,[L]表示这是最后一条规则,匹配到就停止后续处理。
场景2:排除单个文件(比如/special.html)
要是只需要排除某个特定文件,规则改成这样:
RewriteRule ^special.html$ - [L]
^special.html$精准匹配这个文件的请求,同样用[L]终止后续规则。
修改后的完整.htaccess代码
把排除规则加到合适位置后,完整的文件会是这样(以排除/static/目录为例):
<IfModule mod_rewrite.c> <IfModule mod_env.c> SetEnv HTTP_MOD_REWRITE On </IfModule> RewriteEngine on # 添加的排除规则:跳过/static/目录的重写 RewriteRule ^static/ - [L] RewriteRule . - [E=REWRITEBASE:/] RewriteRule ^api$ api/ [L] RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ %{ENV:REWRITEBASE}index.php [NC,L] </IfModule>
小提示
- 如果你要排除多个内容,可以添加多条
RewriteRule ^xxx/ - [L]或者用正则匹配多个模式,比如RewriteRule ^(static|assets)/ - [L]就能同时排除/static/和/assets/目录。 - 记得测试一下,确保指定的内容现在可以直接访问,不会被重写到index.php。
内容的提问来源于stack exchange,提问作者Luca Calabrese
相关产品推荐
相关产品推荐

