我有一个基于Apache/PHP的服务器,我通过/etc/mime.types
中的以下行使Apache将js
、html
和css
文件作为PHP执行:
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
文件的顶部。
值得我注意的是,我最终需要问这个问题的唯一原因是我在用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>
我们这样做是因为即使我们保存为.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>
您可以通过两种方式实现:
-
创建一个
.htaccess
文件。现在在这个文件中,将所有PHP文件读取为
.js
或.css
。理想情况下,您将拥有style.css.php
、scripts.js.php
等文件,这些文件由Apache执行,但用户将获得style.css
、scripts.js
等URL。 -
使用Mime类型。
正如您已经说过的,通过使用以下命令,您可以在PHP中执行这些命令。
application/x-httpd-php phtml pht php js html css
或者另一种方式是:
<FilesMatch "^.*?css*?$"> SetHandler php5-script </FilesMatch>