今天我写了以下重写规则:
RewriteCond %{HTTP_HOST} ^visionale\.book [NC]
RewriteRule ^\/([^/]+)\/$ $1.php [L]
RewriteCond %{HTTP_HOST} ^(www\.)?visionale\.se [NC]
RewriteRule ^(.*)/$ $1.php
第一个适用于我运行 Apache 的笔记本电脑,这是网络酒店的第二个规则。
在网络酒店上应用第一次重写会导致 404 Not Found
在我的笔记本电脑上应用第二条规则神秘地导致找不到“pagename.php.php.php”。
现在我提供的解决方案在这两个地方都有效,但我对真正发生的事情感到困惑。我的本地机器运行 Apache 2.4.6。网络酒店运行 Litespeed。所以这当然是不兼容的,但究竟如何。
我的猜测是 Litespeed 由于缺少功能而错过了第一条规则,但为什么 Apache 没有得到我过去多次使用过的更简单的规则?
编辑:澄清问题。
这条规则:
RewriteRule ^\/([^/]+)\/$ $1.php [L]
不在我运行 Litespeed 的网络酒店上挑选。我的猜测是,这是因为 Litespeed 的重写实现存在缺陷。我想确认这种预感或另一种解释。
这条规则:
RewriteRule ^(.*)/$ $1.php
不再在我的开发机器上工作,但它在过去工作过。看起来很简单。任何以斜杠结尾的东西都应该得到一个“.php”扩展名。但是,在我的开发机器上,它添加了三个“.php”而不是一个。该规则在网络酒店中按预期工作,并且过去它在本地对我有用。这令人费解,我想要一个解释。