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

如何配置Apache .htaccess重写规则,避免影响CSS、JS等静态资源加载

现有配置错误原因

  1. 规则执行顺序错误:兜底的/index.php重写规则带有[L]标记,匹配后会终止后续所有规则执行,写在它后面的伪目录规则永远不会生效。
  2. 伪目录规则缺少前置排除逻辑:没有对静态资源、已存在文件/目录做排除,会错误拦截静态资源请求,导致页面样式、脚本、图片加载失败。
  3. RewriteCond作用范围限制:RewriteCond仅对紧邻它的下一条RewriteRule生效,你原本注释的dictionary规则没有对应排除条件,会无差别拦截所有路径匹配的请求。

修正后的完整.htaccess配置

Options +SymLinksIfOwnerMatch

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # 排除静态资源、指定目录、PHP文件请求,直接放行不重写
    RewriteCond %{REQUEST_URI} ^/(images|css|js|scripts)/ [NC,OR]
    RewriteCond %{REQUEST_URI} \.(css|js|jpe?g|gif|png|php)$ [NC]
    RewriteRule ^ - [L]

    # 已存在的文件、目录直接放行,不做重写
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]

    # 自定义伪目录重写规则,需要新增直接按格式加行即可,QSA自动携带原有查询字符串
    RewriteRule ^dictionary/(.*)$ dictionary.php [NC,L,QSA]
    # 以下为其他4个伪目录示例,可按实际需求修改
    RewriteRule ^faq/(.*)$ faq.php [NC,L,QSA]
    RewriteRule ^blog/(.*)$ blog.php [NC,L,QSA]
    RewriteRule ^product/(.*)$ product.php [NC,L,QSA]
    RewriteRule ^docs/(.*)$ docs.php [NC,L,QSA]

    # 原有dict路径特殊处理,前置到兜底规则之前
    RewriteRule ^dict/[^/]+/[^/]+/(.+)$ $1 [L]

    # 不存在的路径兜底重写到index.php
    RewriteRule ^ /index.php [L]
</IfModule>

配置说明

  • 前置的排除规则优先处理所有静态资源、PHP文件、指定目录的请求,彻底避免静态资源路径错误问题,也保证dictionary.php引入的其他PHP文件不会被重写,完全符合第一个需求。
  • 已存在的文件、目录提前放行,不存在的路径才会进入后续重写逻辑,符合第二个需求。
  • 伪目录规则统一放在兜底规则之前,QSA标记会自动携带原请求的查询字符串,新增伪目录仅需要按照格式新增一行对应规则即可。
  • 如果需要匹配/dictionary根路径(无后续路径参数)的请求,将对应规则的匹配模式改为^dictionary(?:/(.*))?$即可。

内容的提问来源于stack exchange,提问作者Aldo Cauchi Savona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:57:05