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

LiteSpeed服务器下htaccess的RewriteRules规则异常问题咨询

规则部分生效/失效常见成因
  • MultiViews内容协商冲突:LiteSpeed默认兼容Apache的mod_negotiation模块,若开启MultiViews选项,服务器会自动对请求路径做后缀补全匹配,比如访问/store时会直接映射到已存在的store.php文件,完全跳过自定义重写规则,导致规则不触发。
  • RewriteBase配置缺失:你是在项目子目录下部署的.htaccess,若未显式声明RewriteBase,重写规则的路径匹配基准会默认采用服务器全局路径,而非当前子目录路径,导致子目录下的规则匹配错位。
  • 规则顺序逻辑错误:重写规则是从上到下顺序匹配的,若将路径范围更小的精确匹配规则放在范围更大的动态规则之前,可能出现高匹配度规则被低匹配度规则提前拦截的问题。
  • LiteSpeed规则缓存未清理:LiteSpeed对.htaccess的重写规则有默认缓存机制,修改配置后若未清理缓存或重启服务,新修改的规则不会生效,会出现部分旧规则生效、新规则失效的问题。
  • 路径资源冲突:如果store路径对应存在同名的真实目录/文件,服务器会优先响应真实资源,跳过重写规则。
解决步骤
  • 第一步:在.htaccess文件最开头添加如下配置,禁用MultiViews并声明RewriteBase(将/你的子目录路径替换为实际的项目子目录访问路径,若直接部署在根目录则填/):
Options -MultiViews
RewriteBase /你的子目录路径
RewriteEngine On
  • 第二步:调整重写规则顺序,将范围更大的动态匹配规则放在前面,精确匹配规则放在后面,调整后参考配置如下:
Options -MultiViews
RewriteBase /你的子目录路径
RewriteEngine On

# HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R=301,L]

# 动态参数规则放前面
RewriteRule ^news/(.*)$ news.php?art=$1 [L]
# 精确匹配规则放后面
RewriteRule ^homepage$ index.php [L]
RewriteRule ^news$ news.php [L]
RewriteRule ^store$ store.php [L]
RewriteRule ^staff$ teams.php?t=1 [L]
  • 第三步:排查当前项目目录下是否存在名为store的真实目录,若存在可重命名目录或修改重写规则避免冲突。
  • 第四步:清理LiteSpeed的重写规则缓存,或直接重启LiteSpeed服务,确保新配置生效。
  • 第五步:测试时可临时给规则加上R=302标记,比如RewriteRule ^store$ store.php [L,R=302],访问路径时若地址栏发生跳转说明规则已触发,验证完成后去掉R标记即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:09:03