如何修改.htaccess规则排除指定文件不被重写?
如何在.htaccess中排除特定文件不被重写规则拦截
你当前的.htaccess规则是通过将wp-content/uploads/下的所有文件重写到dl-file.php来限制媒体文件访问,但需要跳过指定的几个文件。之前在规则后添加原文件重写规则无效的原因是原规则使用了[L]标记,会终止后续规则的处理,正确的做法是在原规则前添加否定匹配条件,让符合排除条件的请求不触发重写。
修改后的完整规则
RewriteEngine On # 排除指定的第一个文件 RewriteCond %{REQUEST_URI} !^/wp-content/uploads/2022/12/image-26\.png$ # 排除指定的第二个文件 RewriteCond %{REQUEST_URI} !^/wp-content/uploads/2022/11/horse47\.jpg$ # 检查请求的文件存在且非空(保留你原有的条件) RewriteCond %{REQUEST_FILENAME} -s # 执行重写规则 RewriteRule ^wp-content/uploads/(.*)$ dl-file.php?file=$1 [QSA,L]
关键说明
- 每个
RewriteCond前的!表示否定匹配,即当请求的URI不匹配后面的正则时,才会继续执行后续条件和规则。 - 正则中的
.需要用\转义,避免被当作任意字符匹配。 - 如果需要排除更多文件,只需继续添加新的
RewriteCond行即可,格式和上面一致。 - 若要批量排除某类文件(比如所有
.png),可以用正则简化:RewriteCond %{REQUEST_URI} !\.png$
内容的提问来源于stack exchange,提问作者Daniel Lajeunesse
相关产品推荐
相关产品推荐

