我有一个有趣的问题(至少对我而言)。我的.htaccess文件或apache没有按照我的预期去做。
我有一堆基本规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.png|\.jpg|\.gif|\.jpeg|\.bmp|\.ico)$ [NC]
RewriteRule ^(.*)$ index.html?/$1 [L]
总的来说,他们工作得很好。在我的根目录中出现一个同名文件" baseurl / NAME"存在。而不是执行重定向apache尝试访问该文件。 (http://base/NAME/foo/bar
尝试访问NAME.gradle
而不是http://base/index.html?/NAME/foo/bar
)
我知道,我知道......我的第一个条件RewriteCond %{REQUEST_FILENAME} !-f
指定,当存在具有此名称的有效文件时,不应使用重写规则。所以,我添加了一个特定的规则来忽略我的文件NAME.gradle。它没有用。因此,我试图删除"文件检查"完全是条件。它再次无效。那是我开始试验的时候。
这是有趣的部分。我们说我的网址是http://base/NAME/foo/bar
。
我将重写规则/条件减少为单一:RewriteRule ^(.*)$ index.html?/$1 [L]
文件 NAME.txt 按预期工作。网址被重写,一切正常。
文件 NAME.php 也可以按预期工作。
基本上文件 NAME.any_random_suffix (包括.html)按预期工作。
然而 NAME.gradle 文件会以某种方式使apache忽略该规则(或者可能会发生不同的事情并且应用规则 - 谁知道,但我可以肯定地说,不会访问index.html) 。 Apache尝试访问NAME.gradle文件。这当然是不正确和不受欢迎的行为。
现在我可以重命名该文件,一切正常。但是我想知道为什么会发生这种情况。为了让事情更加混合,三个同事(包括我)中的一个人经历了几周的这种行为,另一个则没有,并且按预期对他有效。在添加新的虚拟主机之前,我没有遇到过这种情况。现在,即使我删除虚拟主机,行为也会停止,NAME.gradle文件会破坏导航(这不是因为在添加新主机后apache重新启动,因为在我的devel机器上每天都会重启apache)。