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

RewriteRule配置导致子目录css、js、图片资源无法加载问题求助

问题原因

你配置的新闻重写规则RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ news.php?newstype=$1&newsid=$2&newstitle=$3 [L,QSA,NC,B]存在路径匹配冲突:

  • 该规则会匹配所有路径结构为/一级目录/二级目录/三级内容的请求,你子目录下的静态资源路径如/css/vender/bootstrap.css刚好符合三级结构,会被这条规则优先拦截,重写到news.php接口,而规则携带的[L]标记会直接终止后续所有重写逻辑,导致资源请求不会走到后续判断真实文件是否存在的步骤。
  • 根目录下的style.css、main.js路径为两级结构,不会命中该规则,所以可以正常加载。
解决方案

在新闻重写规则前添加前置校验条件,跳过静态资源请求或真实存在的文件请求即可,推荐两种实现方式:

方式1:直接排除静态资源目录(性能最优)

在新闻重写规则前添加两行条件,匹配到css、js、images目录的请求直接跳过该重写规则,修改后的完整配置如下:

<IfModule mod_rewrite.c>
    RewriteEngine On

    Options +FollowSymlinks
    # Options +SymLinksIfOwnerMatch

    RewriteBase /

    # 新增:排除静态资源目录的重写
    RewriteCond %{REQUEST_URI} !^/(css|js|images)/ [NC]
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ news.php?newstype=$1&newsid=$2&newstitle=$3 [L,QSA,NC,B]

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*)$ $1.php

    # RewriteRule ^(css|js|img)/?$ /$1 [L,QSA,R=301]
</IfModule>

方式2:校验请求是否为真实存在的文件/目录(通用性更强)

如果后续新增其他静态资源目录无需重复修改配置,在新闻重写规则前添加文件存在性校验即可:

<IfModule mod_rewrite.c>
    RewriteEngine On

    Options +FollowSymlinks
    # Options +SymLinksIfOwnerMatch

    RewriteBase /

    # 新增:请求为真实存在的文件/目录则跳过本条重写
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ news.php?newstype=$1&newsid=$2&newstitle=$3 [L,QSA,NC,B]

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*)$ $1.php

    # RewriteRule ^(css|js|img)/?$ /$1 [L,QSA,R=301]
</IfModule>
补充说明

你注释的静态资源跳转规则中匹配的是img目录,但你实际的图片目录名为images,该规则即使开启也不会生效,可直接删除或修改匹配规则为css|js|images。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:06