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

mod_rewrite的.htaccess中If规则配置引发404错误求助

问题排查与解决

核心问题分析

出现404错误的主要原因有两点:

  1. 正则匹配范围错误:原规则中的([^.]+\.(jpg|png))$仅能匹配不带路径的文件名(比如test.jpg),如果请求的是带目录路径的图片(比如/asset/img/photo.png),规则不会触发,请求会被后续的目录转发规则送到index.php,导致PHP返回404;即使触发了重定向,也只会把文件名拼到CDN地址,缺失路径前缀,CDN找不到对应文件。
  2. 301缓存干扰测试:永久重定向会被浏览器缓存,测试阶段容易导致旧规则持续生效,掩盖真实问题。

修复步骤

1. 修正重定向规则的正则表达式

将<If>块内的RewriteRule替换为:

RewriteRule ^(.*\.(jpg|png))$ https://cdn.amante.co.kr/$1 [R=302,L,NC]
  • ^(.*\.(jpg|png))$:匹配完整的请求路径(包含目录前缀),确保重定向后的CDN地址和源站文件路径完全一致。
  • 先用R=302临时重定向,避免浏览器缓存旧规则,测试验证正常后再改回R=301。

2. 验证CDN文件路径

确认CDN上的文件存储路径和源站完全对应,比如源站图片地址是http://your-domain.com/uploads/pic.jpg,CDN上必须存在https://cdn.amante.co.kr/uploads/pic.jpg,否则依然会返回404。

3. 清除浏览器缓存

测试前清除浏览器缓存,或者使用隐私模式访问,避免旧的301缓存影响测试结果。

4. 规则优先级确认(可选)

如果图片存放在asset、system等目录下,当前配置中<If>块已经位于所有转发规则之前,只要正则正确就能优先触发重定向;如果后续新增了其他规则,需确保重定向规则始终在转发到index.php的规则之前。

修正后的完整.htaccess示例

RewriteEngine On
RewriteBase /
Options +FollowSymLinks -Indexes

<If "%{REMOTE_ADDR} == '127.0.0.1'">
    RewriteRule ^(.*\.(jpg|png))$ https://cdn.amante.co.kr/$1 [R=302,L,NC]
</If>

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^asset.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REMOTE_ADDR} !^12\.345\.678\.901$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

内容的提问来源于stack exchange,提问作者Lợi Nguyễn Phước

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:47:05