php – .htaccess文件重定向到错误的目的地

前端之家收集整理的这篇文章主要介绍了php – .htaccess文件重定向到错误的目的地前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个LAMP堆栈.我正在使用以下.htaccess文件自动将请求映射到.PHP文件
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标志在这里是多余的.

猜你在找的PHP相关文章