You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.htaccess中正确配置URL重写规则以排除PDF和JPG文件

如何在.htaccess中正确排除PDF和JPG文件不被URL重写?

问题描述

我有一个用于特定场景下URL重写的.htaccess文件,内容如下:

RewriteEngine On
RewriteRule \.php$ - [L,NC]
RewriteRule ^(?:favicon\.ico|(?:index|custom500|custom404)\.html)$ - [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ index.php?source=$0 [L,QSA]

其中已有规则可避免index.html、custom404.html、custom500.html和favicon.ico被纳入重写范围,同时也排除了所有.php文件。现在我希望将所有以PDF或JPG为扩展名的文件也加入排除列表,尝试添加规则:

RewriteRule ^(?:favicon\.ico|(?:index|custom500|custom404)\.html|?:\*\.pdf)$ - [L,NC]

但Apache仍会将此类文件以index.php?source=myfile.pdf的形式返回。请问如何正确将PDF和JPG文件添加到重写排除列表中?


解决方案

你的问题出在新增的正则表达式语法错误上,?:\*\.pdf这部分不符合Apache mod_rewrite的正则规则(*是量词不能单独这样使用,而且分组语法也有误)。下面是修正后的完整规则:

RewriteEngine On

# 排除所有.php文件
RewriteRule \.php$ - [L,NC]

# 排除指定的静态文件(包括PDF、JPG)
RewriteRule ^(?:favicon\.ico|(?:index|custom500|custom404)\.html|.*\.(?:pdf|jpg))$ - [L,NC]

# 仅当请求的文件不存在时,重写到index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ index.php?source=$0 [L,QSA]

关键修正说明

  1. 正则语法修正:将错误的?:\*\.pdf替换为.*\.(?:pdf|jpg):
    • .*匹配任意长度的字符(对应文件名部分)
    • \.(?:pdf|jpg)匹配.pdf或.jpg扩展名,(?:...)是非捕获分组,避免不必要的内存占用
  2. 规则顺序保持:确保排除规则放在重写规则之前,因为mod_rewrite是按顺序处理规则的,匹配到排除规则后会用[L]标记终止后续处理
  3. 大小写兼容性:保留[NC]标记,这样.PDF、.JPG这类大写扩展名的文件也会被正确排除

如果你的场景中还需要排除其他格式(比如PNG),只需要在括号里添加即可,例如(?:pdf|jpg|png)。


内容的提问来源于stack exchange,提问作者user2399035

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:22:35