【问题标题】:htaccess content negotiation not working on LiteSpeed serverhtaccess 内容协商在 LiteSpeed 服务器上不起作用
【发布时间】:2021-08-21 07:25:15
【问题描述】:

我们的 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 默认)

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

【问题讨论】:

  • 能否请您在您的问题中发布完整的 htaccess 文件,以及以下信息:从哪个 url 到您要重写/重定向的哪个 url?谢谢。
  • @RavinderSingh13 上面的细节应该足够了。我通过广泛的测试将其缩小到这一点。 htaccess 文件的其余部分对此没有影响。

标签: .htaccess url-rewriting litespeed


【解决方案1】:

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

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

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

其他信息和官方文档是here。

【讨论】:

  • 感谢您的回复。我已经被告知这一点,但事实并非如此(至少对于我遇到这些问题的服务器而言)。如果我有规则 RewriteRule ^page1.php /page2.php [L]* 和 RewriteRule ^page2.php /page3.php [L]* 在每个顶部其他我在请求 page1.php 时得到 page3.php,所以它再次解析第一次重写。在任何情况下,删除所有 [L] 标志都没有区别。问题依然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 2013-01-30
  • 1970-01-01
相关资源
最近更新 更多