RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$$1.PHP [NC,L]
因此,如果我浏览到http://example.com/asdf,将加载“asdf.PHP”文件.
但是,如果我创建一个具有相同名称的.css文件(即“asdf.css”),那么当浏览到没有扩展名的名称时,服务器将返回css文件而不是PHP文件.似乎也发生.txt文件扩展名,可能还有其他任何三个字符的扩展名(虽然不会发生.js文件).
我不明白为什么会这样.我对重写规则集的理解是这样的:
1)如果请求的文件不存在
然后
2)如果文件名不包含句点,请将请求重定向到[filename] .PHP
如何返回.txt或.css文件,尤其是当匹配的.PHP文件存在时?我在这里想念的是什么?
谢谢!
与MultiViews发生冲突.尝试在.htaccess文件(或服务器配置)中禁用此功能:
Options -MultiViews
MultiViews(mod_negotiation的一部分)与mod_rewrite尝试做同样的事情,我怀疑是“获胜”.当您请求/ asdf和asdf映射到文件基名时,MultiViews会尝试提供与预期的mime类型相匹配的适当文件(这可以解释为什么错过.js文件).
My understanding of the rewrite ruleset is this: 1) if the file being requested doesn’t exist THEN 2) if the filename does NOT contain a period,redirect the request to [filename].PHP
否则,你对mod_rewrite指令的理解是非常正确的,除了顺序是另一种方式(首先处理RewriteRule模式)…
>如果URL(整个URL)不包含句点.
>并且请求不会映射到有效文件(如果所有文件都有文件扩展名,则不太可能 – 因此可能会省略此条件).
>通过附加.PHP扩展名在内部重写请求.
06001
没有必要在字符类中转义文字句点,并且NC标志在这里是多余的.