如何在.htaccess文件中设置一些PHP头信息

5

我有一些PHP文件中的头部信息:

<?php
    header('Content-Type: text/html; charset=UTF-8');
    header('Content-Style-Type: text/css');
    header('Content-Script-Type: application/javascript');
    header('HTTP/1.1 200 OK');
    header('Content-language: en-US');
    header('X-Powered-By: PHP/5.2.17');
    header('Last-Modified: Tue, 01 Jan 2013 00:00:00 GMT');
    header('Cache-Control: no-store, no-cache, max-age=0, must-revalidate');
    header('Pragma: no-store, no-cache, max-age=0, must-revalidate');
    header('Expires: Tue, 01 Jan 2013 00:00:00 GMT');
?>

我该如何在我的 .htaccess 文件中设置它们?(应该只针对特定文件),以下是我迄今为止得到的内容:
<FilesMatch "^(index.php|about.php|contact.php)$">
    # HTTP Headers should be set in here
</FilesMatch>

类似过期时间和缓存等内容可以在 .htaccess 中定义,但像 HTTP 200 这样的内容不应该这样做。你为什么想要这样做呢? - Reactgular
该指令有一个惊人的名字叫做Header ;-P - Álvaro González
1个回答

3

您需要安装mod_headers,否则可能会出现500错误。您可以将设置标头的操作包装在一个条件语句中,以检查mod_headers是否存在。

<FilesMatch "\.(html|htm|js|css)$">
    <ifModule mod_headers.c>
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Expires "Thu, 1 Jan 2015 05:00:00 GMT"
    </ifModule>
</FilesMatch>

您也可以取消设置头信息。例如,如果您在负载均衡器后面,真实访问者的IP可能以自定义头的形式传递,而您不希望将其暴露给应用程序。

Header unset Real-Visitor-IP

除了到期时间、Etags以及Web服务器特定的自定义标头之外,您不应该在Web服务器级别篡改标头。大多数标头应该在应用程序级别管理,如果您传递更改后的内容类型,则会阻止某些框架正常工作。

mod_headers肯定已经安装在我的服务器上了。这些不是所有的头文件,对吧?我只想将上面的PHP脚本转换为Apache指令... - user3188159
这只是一个例子。是的,所有这些PHP指令都可以使用mod_headers设置,但除了过期、ETags、缓存之外,那就是应用程序的工作了。如果您手动将标头状态设置为200,则您的应用程序将无法回答一个简单的404未找到请求。 - ffflabs
好的,那么Content-Style-Type、Content-Script-Type和Content-language呢? - user3188159
这些是HTML 4.01时代的后备方案。我认为它们在现代浏览器中已经不再有用了。此外,它们只有在声明在HTML文档上时才有意义。样式表不需要默认的Content-Style类型,因为它本身就是样式。 - ffflabs
啊,那些好老的基于DTD的标记语言...我现在使用HTML5,但我想保持对IE 6等浏览器的兼容性... - user3188159

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接