让Apache / PHP根据文件扩展名设置MIME类型,以便以PHP格式执行文件

时间:2013-02-14 15:37:11

标签: php apache mime-types

我有一个基于Apache / PHP的服务器,我通过js中的以下行将Apache作为PHP执行htmlcss/etc/mime.types文件:

  

application / x-httpd-php phtml pht php js html css

我们之所以这样做是因为即使我们保存为.html / .js / .css的任何文件几乎完全不是PHP,我们也需要在其中进行一些模板处理(对于例如,根据我们是在现场还是在测试服务器上更改某些URL的域名。)

麻烦的是,这种使Apache将这些文件视为PHP的方法会导致它们以错误的MIME类型返回,这至少会破坏Chromium中的css文件,并且可能在其他浏览器中具有令人讨厌的效果太

有没有办法可以告诉Apache以PHP格式执行这些文件,但仍然使用正确的MIME类型输出文件扩展名?我不想手动粘贴

<?php
  header("Content-type: text/css");
?>

位于我们所有.css个文件的顶部。

3 个答案:

答案 0 :(得分:2)

  

我们这样做是因为即使我们保存为.html / .js / .css的任何文件几乎完全不是PHP,我们需要在它们中做一些模板

为什么不在主文档中进行动态部分,无论如何你都是动态的?通过PHP解释器运行所有资源是一种浪费。

对于JavaScript:

<script>
domain = "<? echo $domain; ?>";  <----- dynamic bits here
</script>
<script src="xyz.js"></script>   <----- you can use them in xyz.js

对于CSS:

<link rel="stylesheet" href="stylesheet.css">

<style type="text/css">
 /* insert dynamic CSS here, overriding parts from the static style sheet */

 .my_div { color: <? echo $color; ?> }

</style>

答案 1 :(得分:1)

我觉得值得注意的是,我最终需要提出这个问题的唯一原因是我采用了错误的方法来处理PHP执行的.js.css文件

请勿修改您的mime.types文件以实现此目的。相反,在Apache配置(或.htaccess文件)中,使用如下调用:

<Files *.js>
    ForceType application/x-httpd-php
    Header set Content-Type "application/javascript"
</Files>
<Files *.css>
    ForceType application/x-httpd-php
    Header set Content-Type "text/css"
</Files>

答案 2 :(得分:0)

您可以通过两种方式实现:

  1. 创建.htaccess文件。

    现在在此文件中,将所有PHP文件都读取为.js.css。理想情况下,您将拥有以下文件:style.css.phpscripts.js.php并由Apache执行,但用户将获取style.cssscripts.js等网址。

  2. 使用 Mime类型

    正如您所说,通过使用以下内容,您可以在PHP中执行这些操作。

    application/x-httpd-php phtml pht php js html css
    

    或者另一种方式是:

    <FilesMatch "^.*?css*?$">
        SetHandler php5-script
    </FilesMatch>