我的应用程序完全依赖于mod_rewrite将image/JS/CSS URL重写为PHP文档,其中一个参数中包含文件名。
例如:/account/accountname/path/to/file是否重写为:/account/accountname.php?fileName=/path/to/file
php将使用正确的mimetype和文件进行响应。
为了领先于一个显而易见的问题:为什么不直接重写到文件:无法做到这一点,PHP文件会为每个帐户提供不同的文件内容(版本控制),并且"版本目录"唯一已知的位置是在PHPfile本身中。
现在,这适用于除IE9之外的所有浏览器。他们显然发送了一个包含一个只匹配text/css的接受标头的请求标头(其中FF4仍然匹配text/ccss,/)。看起来不错,只是apache拒绝在接收mime头之前解析PHP文档。我只是不知道如何让apache解析CSS文件,并且只在解析文件后响应acceptheader(或者根本不响应,对我来说很好)
希望有人能找到答案。。会有很大帮助提前感谢!
Tim
您想要的mod称为X-SendFile。当在PHP文件中使用时,它允许Apache引擎提供最终文件,就像直接请求一样:
您只需下载并在主机上启用mod_xsendfile。
一篇文章:http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/
示例:
// Look up ABSOLUTE PATH to file, etc
$file_path = ...
header("X-Sendfile: $file_path");
exit();
这将告诉Apache直接为$file_path下的文件提供服务。没有混乱,没有大惊小怪!
我的Serendipity博客引擎也遇到了同样的问题。由于重写规则,IE10不接受从PHP创建的CSS文件。在.htaccess中的重写规则中添加[…,T=text/css]为我解决了这个问题。
RewriteRule ^(serendipity.css|serendipity_admin.css) index.php?url=/$1 [L,QSA,T=text/css]