我尝试使用Apache模块xsendfile获取文件流中有更好的表现。 问题是,这只是工作,如果我不使用PHP的CGI版本,如果我不使用重写规则为我的网址。
问题1:mod_rewrite的
调用此一个在浏览器将工作:
http://subdomain.domain.de/image.php
这一次给我一个404:
http://subdomain.domain.de/rewrittenImageUrl
重写规则工作的权利。 404错误是由xsendfile模块触发。 如果我在htaccess的(增加一个“R”的规则想在这个问题建议 ),它会重新工作,因为我重定向到上面给出的第一个地址。 但是重定向是不是我想要的。
我还观看了这个职位有关的符号链接,但我认为这不可能是我的帖子的解决方案,只要我用用GETENV(“DOCUMENT_ROOT”)产生的绝对路径? 这pathes不应该使用任何符号链接,不是吗? 还是我失去了在这一点上的东西吗?
问题2:CGI
如果我切换PHP模式的CGI版本,我会得到一个0字节的文件。 这似乎是相同的行为,如服务器将不xsendfile的任何安装反应。
我已经更新了模块到最新版本。 还测试了没有任何成功的绝对和相对的链接。 除此之外停用输出压缩没有工作。
要在这里完成给定的信息是我使用的PHP代码:
ini_set('zlib.output_compression', 'Off');
$realImagePath = getenv('document_root')."fixedRelativeImagePathNoParamsNeeded.jpg";
$imageInfos = @getimagesize($realImagePath);
header('Content-Type: '.$imageInfos['mime']);
header("X-Sendfile: $realImagePath");
exit();
任何有线索?
更新(2014年1月6日)
第二个问题就解决了 :我不知道为什么,但我在Apache的配置开启xsendfile而不是使用htaccess文件后工作。 (我会像其他问题就解决了,太下面添加一个答案soons。)
除了第一种:首先,我并没有在httpd.conf中添加任何选项,因为它应该与标准配置中工作。 反正我现在问我的供应商,以绝对项目路径添加到XSendFilePath的白名单中的全局设置。 这暂时解决了问题1.用mod_rewrite的。 但是,这只是似乎没有我的情况真正的解决办法,因为我在服务器上运行许多不同的项目,每一个分开的下载路径。 所以,我要问我的供应商每次我开始一个新项目,一个新的路径添加到配置。 我仍然只是无法使用X-sendfile的与mod_rewrotite虽然我应该能够访问文档根目录没有任何额外的设置。