OpenLiteSpeed下.htaccess重写规则上下文错误排查
报错含义
does not fall inside current context是OpenLiteSpeed的.htaccess规则校验报错,触发原因有两个:
- OpenLiteSpeed对目录级.htaccess的RewriteRule有上下文限制:根目录下的.htaccess,规则只能匹配相对于根目录的路径,正则开头不能写前导斜杠,也不能用
^/?这类带可选前导斜杠的写法,否则会被判定为尝试匹配当前站点目录外的路径,直接忽略规则。 - 你原有规则的放置顺序错误:重定向规则写在了Perch Runway的前端控制器规则后面,那条规则带
[L]终止标记,所有非真实文件、非/perch开头的请求都会被直接转发给PHP入口程序,根本不会执行到后面的重定向规则。
另外你原有正则的匹配范围也不符合需求:greenbooth/?(.*)只能匹配greenbooth后直接跟斜杠或路径结束的URL,匹配不到greenbooth-village这类带后缀的同前缀路径。
补充说明:RewriteRule默认不会修改URL携带的查询字符串,只要路径部分匹配成功,不管后面带不带查询参数都会正常触发跳转,不需要额外写规则匹配查询串。
修正方案
将重定向规则移动到RewriteEngine On的下一行(最高优先级),调整正则写法符合OpenLiteSpeed的上下文要求,同时扩大匹配范围覆盖所有带find-a-home/new-homes/greenbooth前缀的路径,修正后的完整.htaccess配置如下:
# Perch Runway RewriteEngine On # 301重定向规则(优先执行) RewriteRule ^find-a-home/new-homes/greenbooth(.*)$ https://demo.com/new-homes [R=301,L] RewriteCond %{REQUEST_URI} !^/perch RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* /perch/core/runway/start.php [L] Redirect 301 /index.htm / Redirect 301 /portfolio.htm /find-a-home/new-homes Redirect 301 /buyers.htm / Redirect 301 /land.htm /
规则说明
- 去掉了正则开头的
/?写法,直接匹配相对根目录的路径,符合OpenLiteSpeed的上下文校验规则,不会再触发路径越界报错。 - 将原正则的
greenbooth/?(.*)调整为greenbooth(.*),可同时匹配/greenbooth、/greenbooth/xxx、/greenbooth-village/xxx等所有包含目标前缀的路径,满足单条规则覆盖所有目标URL的需求。 - 规则移到前端转发规则之前,优先匹配执行,不会被后续规则的
[L]标记截断。 - 规则默认透传原URL的查询字符串,带
?property_beds=&property_type_price=60000这类参数的URL可正常触发跳转;如果不需要保留原查询参数,将目标URL改为https://demo.com/new-homes?即可。 - 配置修改完成后需要重启OpenLiteSpeed服务,或在管理面板清空.htaccess缓存后再测试,OpenLiteSpeed默认对.htaccess规则有缓存,不重载配置不会加载新规则。
内容的提问来源于stack exchange,提问作者StephenMeehan
相关产品推荐
相关产品推荐

