mod_xsendfile不会CGI和mod_rewrite的工作(mod_xsendfile wo

2019-10-19 03:18发布

我尝试使用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虽然我应该能够访问文档根目录没有任何额外的设置。

Answer 1:

mod_xsendfile确实构建从相对路径绝对路径基于所述请求URI ,这可能实际上在某些情况下一个子请求。 这并不总是产生预期的结果。

因此,我一直在使用绝对URI X-SENDFILE头。

上述的第二个结果是,构建的路径,不一定是你所期望的,自动列入白名单,你不要指望一个目录,而那当然不是白名单,你会预期的目录。

因此,总是白名单的URI。

总之,阿帕奇可能不考虑相同的目录是一个请求的当前工作目录,你(或后端* CGI)。 只有重写增加了混乱。

其实,我认为是完全丢弃的相对路径/自动白名单的东西这个原因,因为它可以固然很混乱,而且也正在详细记录。 我想这是一个有点晚了完全放弃它,但我至少应该将其标记过时。



Answer 2:

在主站的HT访问文件尝试使用[L,R=301]仅仅是在原地的[QSA,L][L]

例如,在地方使用:

RewriteRule ^download/(.*)/$ download.php?x=$1 [QSA,L]

采用:

RewriteRule ^download/(.*)/$ download.php?x=$1 [L,R=301]

告诉我,如果解决你的问题的家伙!



文章来源: mod_xsendfile won't work with CGI and mod_rewrite