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

使用RewriteCond匹配URL:开头符合且排除指定结尾字符串的规则问题

Apache RewriteCond 负向预查错误分析与修复

需求说明

现有一批URL:

/wp-content/uploads/2023/01/Hambu-logo.png
/wp-content/uploads/2023/01/Anesa-logo.png
/wp-content/uploads/2023/01/Rock-logo.png
/wp-content/uploads/2023/01/Blue-logo.png

需要实现:当请求URI以/wp-content/uploads/开头,且不以Hambu-logo.png或Anesa-logo.png结尾时,将请求重定向到目标站点。

尝试的错误规则

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/.*(?!(Hambu-logo.png|Anesa-logo.png))$
RewriteRule ^wp-content/uploads(.*)$ https://www.test.com/wp-content/uploads$1 [R=302,L]

错误原因

你写的负向预查位置逻辑错误:.*(?!...)的写法会让正则先匹配任意字符到末尾前的某个位置,再检查后续内容,这导致负向预查根本没作用在URI的结尾位置,自然无法筛选出符合要求的URL。

修复后的规则

写法一(双条件更直观)

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/
RewriteCond %{REQUEST_URI} !/(Hambu-logo.png|Anesa-logo.png)$
RewriteRule ^wp-content/uploads(.*)$ https://www.test.com/wp-content/uploads$1 [R=302,L]

写法二(单条件结合负向预查)

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-content/uploads/(?!.*(Hambu-logo.png|Anesa-logo.png)$).*$
RewriteRule ^wp-content/uploads(.*)$ https://www.test.com/wp-content/uploads$1 [R=302,L]

规则解释

  1. 双条件写法:
    • 第一个条件确保URI以/wp-content/uploads/开头
    • 第二个条件用!取反,限制URI不能以/Hambu-logo.png或/Anesa-logo.png结尾(注意路径中的/,保证匹配的是完整文件名结尾)
  2. 单条件写法:
    • ^/wp-content/uploads/(?!.*(Hambu-logo.png|Anesa-logo.png)$).*$ 表示:以/wp-content/uploads/开头,且整个URI的结尾不是指定的两个文件名,精准匹配需要重定向的请求。

两种写法都能正确区分:Rock-logo.png和Blue-logo.png会被重定向,Hambu-logo.png和Anesa-logo.png则保持原请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:15:32