Php 重写规则不适用于根url(http://domain.com)但适用于具有路径的URL(http://domain.com/foo)

Php 重写规则不适用于根url(http://domain.com)但适用于具有路径的URL(http://domain.com/foo),php,apache,mod-rewrite,Php,Apache,Mod Rewrite,我的htaccess中有以下代码: First condition ------------------------------------------ RewriteCond %{REQUEST_METHOD} GET RewriteCond %{DOCUMENT_ROOT}/cache/html/%{HTTP_HOST}/index.html -f RewriteRule ^$ /cache/html/%{HTTP_HOST}/index.html [NC,L] Second condit

我的htaccess中有以下代码:

First condition
------------------------------------------
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cache/html/%{HTTP_HOST}/index.html -f
RewriteRule ^$ /cache/html/%{HTTP_HOST}/index.html [NC,L]

Second condition
------------------------------------------
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cache/html/%{HTTP_HOST}/$1/index.html -f
RewriteRule ^(.*)$ /cache/html/%{HTTP_HOST}/$1/index.html [L]
它应该显示当前路由的缓存html文件(如果存在)。我最初只有第二个条件,它在本地主机(windows上的apache)下正常工作

当我将它移动到linux登台服务器时,问题就开始了——它在根url上不起作用

然后我尝试添加第一个条件(^$),但仍然没有成功。因此,我尝试添加(仅用于测试)此条件:

RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{DOCUMENT_ROOT}/cache/html/%{HTTP_HOST}/index.html -f
RewriteRule ^index\.html$ /cache/html/%{HTTP_HOST}/index.html [L]
如果我是路由到它,它会工作,并向我显示缓存的html。 我就是搞不懂

这是完整的.htaccess文件:(如果有必要,我使用的是Laravel)


谢谢大家!

首先,您可以添加RewriteLog,或者如果您有Apache2.4,可以使用LogLevel查看实际错误和跟踪

日志级别警报重写:trace3

在本例中,您将确切地看到所比较的内容。更多信息请点击这里

在你的情况下,我认为你缺少一个基础:

重写基/


在任何情况下,请添加一些跟踪数据以确保。

重写库没有帮助:(。我将尝试跟踪它,看看我得到了什么。感谢您为我添加跟踪以帮助您。