AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 852484
Accepted
Ryan Griggs
Ryan Griggs
Asked: 2017-05-27 10:50:28 +0800 CST2017-05-27 10:50:28 +0800 CST 2017-05-27 10:50:28 +0800 CST

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

  • 772

我有一个 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 文件存在时?我在这里想念什么?

谢谢!

php
  • 1 1 个回答
  • 424 Views

1 个回答

  • Voted
  1. Best Answer
    MrWhite
    2017-05-27T10:59:04+08:002017-05-27T10:59:04+08:00

    如果您有多个具有相同基本名称的文件,那么听起来您可能与MultiViews. 尝试在您的.htaccess文件(或服务器配置)中禁用此功能:

    Options -MultiViews
    

    MultiViews(mod_negotiation 的一部分)与您尝试使用 mod_rewrite 做的事情相同,我怀疑是“获胜”。当您请求/asdf并asdf映射到文件基名时,然后MultiViews尝试提供与预期 mime 类型匹配的适当文件(这可以解释.js文件丢失的原因)。

    我对重写规则集的理解是:1)如果请求的文件不存在,那么 2)如果文件名不包含句点,则将请求重定向到 [filename].php

    否则,您对 mod_rewrite 指令的理解非常正确,只是顺序相反(首先处理RewriteRule 模式)......

    1. 如果 URL(即整个 URL)不包含句点。
    2. 并且该请求未映射到有效文件(如果您的所有文件都具有文件扩展名,则不太可能 - 所以这个条件可能会被省略)。
    3. .php通过附加扩展在内部重写请求。
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    

    没有必要在字符类中转义文字句点,并且NC标志在这里是多余的。

    • 2

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve