我试图通过一些创意.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运行这个。
是的,上面的例子是非常不安全的。不要在家里这样做。为了这个具体问题,它们只是简化的例子。 –