加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:45:40 所属栏目:PHP教程 来源:网络整理
导读:我有一个LAMP堆栈.我正在使用以下.htaccess文件自动将请求映射到.php文件: RewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^([^.]+)$$1.php [NC,L] 因此,如果我浏览到http://example.com/asdf,将加载“asdf.php”文件. 但是,如果我创建一个具有相同名称
我有一个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标志在这里是多余的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读