【问题标题】:Why is Apache executing .php.html files as PHP?为什么 Apache 将 .php.html 文件作为 PHP 执行?
【发布时间】:2010-09-16 10:18:06
【问题描述】:

我有一个奇怪的问题...我正在使用一个文档生成器,它会生成大量的输出,例如 docs/foo.php.html。它是 XHTML,因此在文件的开头包含 <?xml...> 标签。问题是,Apache 不知何故决定通过 PHP 解释器运行它,即使“.php”出现在文件名的中间,而不是最后。反过来,这会触发 PHP 错误,因为它将“<?”视为开始执行 PHP 代码的命令,并立即被后面的“xml...”弄糊涂。

如何将 Apache 配置为仅执行 .php 文件而不执行 .php.html 文件?字符串“php.html”没有显式出现在我的 Apache 配置文件中的任何位置。有一行“AddHandler php5-script .php”,但我看不出它还包括“.php.html”文件。

【问题讨论】:

  • 据我所知,谷歌是不可能的,因为谷歌忽略了波动。 “.php.html 问题”等与搜索“php html 问题”相同,这会产生与我的问题无关的无数次点击。

标签: php html apache


【解决方案1】:

问题似乎出在mod_mime

引自 Apache mod_mime 文档页面:

如果您希望仅将文件名的最后一个以点分隔的部分映射到特定的元数据,则不要使用 Add* 指令。例如,如果您希望将文件 foo.html.cgi 处理为 CGI 脚本,而不是文件 bar.cgi.html,则不要使用 AddHandler cgi-script .cgi,而是使用

<FilesMatch \.cgi$>

SetHandler cgi-script

</FilesMatch>

另外,您可以在 Google 上搜索apache mod_mime "multiple extensions"

【讨论】:

  • 这解决了它,谢谢!如果我可以消除短标签,可能会很理想,但在这种情况下不能这样做。
  • 哇,我不知道 Apache 做到了这一点 - 当然这可能是一个很大的安全问题(如果你没有意识到这一点并且你做了一些类似命名文件 filename.php.txt 的想法会阻止它们被解释)。
【解决方案2】:

.html 文件是否被列为允许被解析为 PHP?我已经看到一些共享主机将 .html 文件设置为可用作有效的 PHP 扩展名,这也可能会捕获您的 .php.html 文件。

【讨论】:

  • 我一开始也是这么想的,但是如果我创建一个文件'test.html',PHP代码将不会在其中执行。如果我创建一个文件'test.php.html',PHP 代码将在其中执行。
【解决方案3】:

您可以禁用 PHP 的短标签——这是混合 PHP 和 XML 的推荐方式。

http://us.php.net/ini.core

short_open_tag = 0

【讨论】:

  • 不幸的是,我认为有一些地方使用像 =$foo?> 这样需要短标签的东西:(
  • 是的..但是。如果您这样做,xml 文件将起作用,但它们的服务速度将比应有的慢得多,因为它们必须通过 php 解释器(这也将添加所有标准的 php 无缓存标头)。不是一个好计划。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多