当我使用时
AddType application/x-httpd-php .phtml .pwml .php5 .php4 .php3 .php2 .php .inc .htm .html
在httpd.conf中,具有给定扩展名的文件开始由PHP解释器解释。但它们也都开始具有“text/html”MIME 类型。
我知道我可以使用
<?php header("Content-type: WHATEVER"); ?>
在文件本身中,但是是否可以在 PHP 解释扩展之后立即使用相同的 httpd.conf 分配 MIME 类型?
我想要的是一种让 PHP 解释任何文件类型的方法,无论扩展名是什么,并且不要手动编写 header ,因为它总是可以从扩展名推断出来。换句话说,如果没有分配给 PHP 解释器,我想保留文件所具有的 MIME 类型。
最佳答案
默认情况下,即。什么时候: 您的 mime.types 不包含 (*):
application/x-httpd-php php
行且您的 httpd.conf 不包含 (**):
PHPIniDir "C:/PHP/"
LoadModule php5_module "C:/PHP/php5apache2_4.dll"
(或类似的内容,具体取决于 php 的路径和 apache 版本)
.. 对 php 文件的任何请求都将返回 php 的源代码(未解释),并且 Apache 不会设置 Content-Type,因此它取决于你的浏览器如何解释它(谷歌 Mime 类型嗅探)。通常您只会在浏览器的视口(viewport)中看到源代码。
如果您的 mime.types 包含 (*) 并且 httpd.conf 不包含 (** )它会告诉 Apache 使用 Content-Type: application/x-httpd-php 为您的 php 文件提供服务。但是,它仍然是源代码,您的浏览器会询问您是否打开/保存请求的资源。
一般来说,如果您的 httpd.conf 包含(并以这种方式加载 php 模块):
PHPIniDir "C:/PHP/"
LoadModule php5_module "C:/PHP/php5apache2_4.dll"
(或类似的内容,具体取决于 php 的路径和 apache 版本)... mime.types 行:
application/x-httpd-php php
其用途与预期略有不同。它不再为 Content-Type: ... HTTP 响应提供 MIME 类型。它告诉 Apache 哪些文件扩展名应该发送到 PHP 解释器。您可以将以下行添加到 mime.types 中:
application/x-httpd-php xyz
它会告诉 Apache 将任何带有 xyz 扩展名的文件的内容发送到 PHP 解释器,但您的 HTTP 响应将具有 Content-Type: text/html 设置,而不是像您想象的那样 application/x-httpd-php。
因此,您可以通过将其添加到 mime.types 中来实现您想要的目的:
application/x-httpd-php phtml pwml php5 php4 php3 php2 php inc htm html
当然,您必须加载 PHP 模块。
您可能还想阅读 mod_rewrite apache module .
即使您将带有 *xyz(无论什么)扩展名的文件解释为 PHP,您也可以使用以下方法自由更改内容类型:
header('Content-Type: ....');
关于php - PHP解释后设置MIME类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093069/