首页 > 解决方案 > htaccess 内容协商在 LiteSpeed 服务器上不起作用

问题描述

我们的 htaccess 中有代码,可以为移动用户提供不同的 Web 模板,例如

RewriteCond %{HTTP_USER_AGENT}  "Mobile"
RewriteCond %{REQUEST_URI} "!_mob.php"
RewriteRule ^(.*).php$    /$1_mob.php [L,QSA]

因此,如果条件评估为真,文件foo.php将在内部重写为foo_mob.php 。现在我们有一个额外的 'pretty-url' 指令,它根据查询字符串将描述性类别和产品页面名称重写为内部格式,例如

RewriteCond %{REQUEST_URI} ^/category1\.htm
RewriteRule ^.*$  /index.php?cPath=1 [L,QSA]

结合上述内容,这应该会在移动设备上向用户显示模板index_mob.php 。多年来,这在 Apache 服务器上运行良好,但在我们现在转移到 LiteSpeed 服务器后就不再工作了。移动模板显示为带有显式 .php 扩展名的请求,但不是那些首先重写为index.php的请求(其中还包括默认情况下重写为index.php的根 / )

任何解决问题的帮助将不胜感激。

标签: .htaccessurl-rewritinglitespeed

解决方案


如果您在使用 Litespeed 时在组合中同时使用上述两个 .htaccess 规则,则问题是L标签在.htaccess两次中。

[L] 标签代表 Last,在 Apache 和 Litespeed 中有不同的含义。

[L] 标志之后的规则集可能仍由 Apache 在后续迭代中处理,但在 Litespeed 和大多数其他上下文中并非如此。

附加信息和官方文档在这里


推荐阅读