.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.phpdomain.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
相关产品推荐
相关产品推荐

