如何让 Apache2 将 .shtml 文件作为 Content-Type“text/html”而不是“text.html”提供?

如何让 Apache2 将 .shtml 文件作为 Content-Type“text/html”而不是“text.html”提供?

我正在开发一个以 shtml 形式实现的网站,当我尝试加载主页时(http://simplyclassicremodeling.com),它说无法打开文件,因为它传输的内容类型为“text.html”。该页面在 Chrome 中加载正常,在 Firefox 中加载正常(存在一些与此无关的 CSS 问题)。

httpd.conf 有:

Options Includes Indexes FollowSymLinks ExecCGI 
AddHandler cgi-script .cgi .pl
AddType text/html .shtml
AddHandler server-parsed .shtml

并进一步如下:

AddType text/html .shtml 
AddOutputFilter INCLUDES .shtml
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript application/javascript

Telnet 会话中的 HTTP 标头包括:

GET http://simplyclassicremodeling.com/ HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 27 Jan 2012 21:57:54 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.9-dev DAV/2 PHP/5.2.6
Accept-Ranges: bytes
Cache-Control: max-age=2592000, public
Expires: Sun, 26 Feb 2012 21:57:54 GMT
X-UA-Compatible: IE=Edge,chrome=1
Connection: close
Content-Type: text.html

“AddType”和“AddOutputFilter”是否被调换了位置?根据这些信息,您知道为什么 IE8 会认为 .shtml 文件是以 Content-Type: text.html 发送的吗?有没有办法全局询问 Apache,“如果您要以‘text.html’传输,请改用‘text/html’?”

谢谢,

答案1

httpd.conf 或包含文件中的某个其他位置可能存在错误行。我会使用 grep 检查主配置和其他配置以找到此问题。

grep Includes httpd.conf
grep text.html httpd.conf

或者,您可以使用 FilesMatch 强制类型。以下是示例:

<FilesMatch "\.(shtml)$">
   # type only
   ForceType text/html
   # type and character set
   # ForceType 'text/html; charset=UTF-8'
</FilesMatch>

答案2

如果浏览器是 IE,你可以尝试重写标头:

BrowserMatch MSIE
SetEnvIf Request_URI "\.shtml$" msie_ssi
Header set Content-Type text/html env=msie_ssi

(警告:这未经测试,但我认为应该按照mod_setenvif 文档

相关内容