2017-07-14 31 views
0

我试图通过一些创意.htaccess重写的X发送文件提供文件。沸腾下来的最基本,我基本上捕获任何传入的请求并将其路由到一个处理程序文件,像这样......显示404处理程序文件的X发送文件

的.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内容。相反,我看到:

未找到:在此服务器上未找到请求的URL /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,并再次尝试,看看它是否解决了这个问题。