最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Apache RewriteCond 否定条件如何写
时间:2026-08-08 13:41:26 编辑:袖梨 来源:一聚教程网
RewriteCond 的否定通过在条件值前加 ! 实现,表示“不匹配该条件”,如 !^www.example.com$;! 紧贴条件值无空格,不作用于标志,可与其他条件组合使用。
RewriteCond 的否定条件,是通过在条件字符串前加 !(英文感叹号)来实现的,表示“不匹配该条件”。
比如你想让规则不在某个条件下生效,就在对应条件值前面加 !。
基本写法:在条件值前加 !
RewriteCond %{HTTP_HOST} !^www.example.com$
这表示:当 Host 不等于 www.example.com 时,后续的 RewriteRule 才会执行。
注意:
-
!紧贴在条件值前面,中间不能有空格; - 正则表达式本身仍需按规则转义(如点号
.要写成.); -
!否定的是整个匹配表达式的结果,不是正则语法的一部分。
常见否定场景示例
-
排除某个域名
RewriteCond %{HTTP_HOST} !^(www.)?example.com$RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]→ 把所有非
example.com或www.example.com的域名都跳转过去。 -
排除特定路径(如静态资源)
RewriteCond %{REQUEST_URI} !^/(css|js|images)/RewriteRule ^(.*)$ /index.php [L]→ 所有不以
/css/、/js/、/images/开头的请求才走 PHP 入口。 -
排除某个查询参数
RewriteCond %{QUERY_STRING} !^debug=1$RewriteRule ^api/ - [F]→ 当查询字符串不是
debug=1时,禁止访问/api/。
注意:不要在标志里加 !
RewriteCond 的标志(如 [NC]、[OR])不支持 ! 否定。
否定只作用于匹配字符串本身。如果需要逻辑“非”,必须写在条件值前,而不是标志里。
错误写法 ❌:
RewriteCond %{REQUEST_FILENAME} -f [!NC]# 无效!标志里不能加 !
正确思路 ✅:用 ! 否定整个条件,或改用其他判断逻辑(例如用 -f 判断存在,再配合 ! 表示“不存在”):
RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php [L]
→ 文件和目录都不存在时,才重写到 index.php。
多个条件的否定组合
用 [OR] 或默认的 AND 逻辑时,每个 RewriteCond 可独立加 !:
RewriteCond %{HTTP_USER_AGENT} !GooglebotRewriteCond %{HTTP_USER_AGENT} !BingbotRewriteRule ^robots.txt$ /custom-robots.txt [L]
→ 排除 Google 和 Bing 的爬虫,其他访问才返回自定义 robots.txt。
若想“只要不是这两个之一就触发”,也可用 [OR] + ! 组合,但要注意逻辑是否符合预期。
不复杂但容易忽略
相关文章
- 原神少女哥伦比娅值得抽吗 新角色哥伦比娅问题解答 08-08
- 明日方舟:终末地情报档案收集攻略 情报档案收集分享 08-08
- 原神6.3版本月之四角色抽取攻略 少女抽取优势建议 08-08
- 无限暖暖若生命如诗2.1版本 巨兽养成计划玩法介绍 08-08
- 七猫小说下载到本地的怎么找 七猫小说下载保存路径介绍 08-08
- 崩坏:星穹铁道货币战争攻略 货币战争成就获得攻略 08-08