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

.htaccess未排除PNG文件导致favicon无法加载 正则是否有误?

问题原因

  1. base标签配置错误
    你使用$_SERVER["PHP_SELF"]作为base href的值,该变量返回的是当前执行PHP脚本的路径(例如站点根目录部署时返回/app.php),会导致页面内所有相对路径都拼接/app.php/作为前缀,实际请求的favicon路径变为/app.php/resources/imgs/logos/android-chrome-512x512.png,该路径并非真实存在的静态文件,会触发重写规则交给app.php处理,无法返回图片资源。
  2. .htaccess排除规则逻辑错误
    现有规则RewriteCond $1 !^(app\.php|robots\.txt|imgs|logos|\.png)仅匹配请求路径开头符合的内容:
  • .png写在起始匹配符^后,只能匹配路径开头为.png的特殊文件,无法匹配任意路径下后缀为.png的正常图片
  • 排除的imgs、logos目录没有匹配上层的resources前缀,实际路径resources/imgs/xxx无法命中排除规则

修复步骤

1. 修正base标签配置

base标签需要指向站点根路径,而非PHP脚本路径,修改为:

<!-- 根目录部署写法 -->
<base href="/">
<!-- 子目录部署时修改为对应子目录,例如 <base href="/mysite/"> -->

如果需要保留动态配置,可使用$_SERVER['HTTP_HOST']拼接站点根路径,不要使用PHP_SELF。

2. 优化.htaccess重写规则

你已经配置了RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d,正常真实存在的静态文件不会触发重写,若要额外确保静态资源不被重写,可将排除规则修改为匹配后缀的形式:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ app.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 排除所有常见静态资源后缀,NC表示忽略大小写
RewriteCond $1 !\.(png|jpg|jpeg|gif|ico|css|js|txt)$ [NC]
RewriteCond $1 !^(app\.php|robots\.txt|resources) [NC]
RewriteRule ^(.*)$ app.php?url=$1 [L,QSA]

3. 修正favicon标签配置

你使用png格式作为favicon,type属性不要写image/x-icon(该值仅适用于.ico格式),同时补充标准的rel属性适配不同浏览器:

<link rel="icon" href="resources/imgs/logos/android-chrome-512x512.png" type="image/png">
<link rel="shortcut icon" href="resources/imgs/logos/android-chrome-512x512.png" type="image/png">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:57:02