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

Rewrite规则将所有请求定向至指定目录失败,报500错误(LiteSpeed)

LiteSpeed服务器上Rewrite规则500错误及失效问题

问题现象

  • 以下Rewrite规则在LiteSpeed服务器上莫名抛出500错误,但本地主机可正常运行:
<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    RewriteRule ^(.*)$ folder/$1 [L]

</IfModule>
  • 若在规则的^后添加任意字符(如x),规则即可正常工作,所有以x开头的文件都会从目标目录读取:
RewriteRule ^x(.*)$ folder/x$1 [L]
  • 以下规则同样存在本地正常、LiteSpeed服务器失效的问题:
RewriteRule ^((?!folder/).*)$ folder/$1 [L]

问题原因

  1. 第一个规则触发无限循环:^(.*)$会匹配所有请求,包括重写后的folder/xxx路径,导致请求被反复重写成folder/folder/xxx,直到服务器达到重写次数上限,抛出500错误。本地Apache的重写次数限制或处理逻辑与LiteSpeed不同,所以未触发报错。
  2. 负向预查规则兼容性问题:LiteSpeed的Rewrite引擎对PCRE负向预查的解析逻辑和Apache存在差异,导致^((?!folder/).*)$规则无法正确生效。

解决方案

方案1:添加条件排除目标目录,避免循环

通过RewriteCond排除已指向folder/的请求,阻止循环重写:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} !^/folder/
    RewriteRule ^(.*)$ folder/$1 [L]
</IfModule>

方案2:使用END标记终止重写

LiteSpeed支持END标记(Apache 2.4+也支持),添加后会直接终止所有后续重写操作,从根源避免循环:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^(.*)$ folder/$1 [END]
</IfModule>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:15