我试图通过一些有创意的.htaccess重写来通过X-Sendfile提供文件。将它归结为最基本的要素,我基本上捕获任何传入的请求并将其路由到处理程序文件,就像这样......
的.htaccess :
# If the requested file exists...
RewriteCond %{REQUEST_FILENAME} -f
# Send the request to handler.php instead
RewriteRule . /handler.php [L]
这是 handler.php :
<?php
header( 'Content-Type: text/html' );
header( "X-My-Debug: {$_SERVER['REQUEST_URI']}" );
header( "X-Sendfile: {$_SERVER['REQUEST_URI']}" );
die();
现在,理想情况下,如果我请求现有文件,例如localhost/helloworld.htm
,我应该在浏览器中看到helloworld.htm
的内容。相反,我看到了:
未找到:在此服务器上找不到请求的网址/handler.php。
奇怪,请求被路由到处理程序,但这不是发送到X-Sendfile的文件名。此外,响应中缺少我的自定义调试头。所以当然,我要做的第一件事是尝试使用处理程序......
<?php
header( 'Content-Type: text/html' );
header( "X-My-Debug: {$_SERVER['REQUEST_URI']}" );
header( "X-Sendfile: helloworld.htm" );
die();
如果我这样做,那么localhost/helloworld.html
仍然会出现上述错误... 然而,当我现在直接访问localhost/handler.php
时,它最终确实为我服务了编码helloworld.htm
内容,我的调试标头现在出现在响应中。无论是否用相对路径或绝对路径替换硬编码文件,结果都是相同的。
那我在这里错过了什么?当我重写请求时,为什么X-Sendfile在HANDLER文件中给出了404错误,但是当我直接访问处理程序时却没有?为什么我的自定义调试头会丢失?
为了记录,我通过MAMP 4.1.1运行它。
答案 0 :(得分:0)
当路径正确时,X-Sendfile将提供404 NOT FOUND错误页面,但该文件没有足够的读/写/执行权限。尝试将您的文件chmod为0644并再次尝试查看它是否解决了问题。