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

.htaccess重写规则失效问题(含JS/CSS版本号处理需求)

解决方案

我来帮你调整.htaccess配置,完美实现你需要的三个核心需求:转发非public请求到index.php、保留public资源正常访问、移除CSS/JS文件名中的数字版本号。下面是完整的配置和详细解释:

完整的.htaccess配置

# 限制PHP文件仅本地访问,除了index.php
<Files *.php>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Files>
<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # 移除CSS/JS文件名中的数字版本号
    RewriteRule ^public/(css|js)/([^.]+)\.\d+\.(css|js)$ public/$1/$2.$3 [L]

    # 排除public下的所有资源请求,直接放行
    RewriteRule ^public/ - [L]

    # 所有非public请求转发到public/index.php,保留查询参数
    RewriteRule ^ public/index.php [L,QSA]
</IfModule>

关键规则拆解说明

  • 版本号移除规则:
    这条规则专门匹配public/css/或public/js/下带数字版本号的文件(比如style.20180523.css),自动剥离中间的数字序列,重写成干净的文件名(比如style.css)。[L]标记表示处理完这条规则就停止后续匹配,避免资源被错误转发。

  • public资源放行规则:
    匹配所有以public/开头的请求,直接放行(-表示不做任何重写操作),确保图片、CSS、JS等静态资源能直接被访问,不会被转发到index.php。

  • 全局请求转发规则:
    所有不满足前两条规则的请求,都会被统一转发到public/index.php。QSA标记会保留原请求的查询参数(比如domain.com/users/123?foo=bar会把?foo=bar完整传递给index.php)。

测试案例验证

  • domain.com/users/123 → 成功转发到public/index.php
  • domain.com/public/images/logo.png → 直接访问原文件,无任何重写
  • domain.com/public/css/style.20180523.css → 自动重写为public/css/style.css并访问该文件
  • domain.com/public/js/app.12345.js → 自动重写为public/js/app.js并访问该文件

注意要确保你的服务器已经开启了mod_rewrite模块,否则重写规则不会生效哦。

内容的提问来源于stack exchange,提问作者Horváth Zsolt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:03