我试图通过一些创造性的.htaccess重写通过attempting提供文件服务。把它煮到最基本的部分,我基本上会捕捉到任何传入的请求并将其路由到处理程序文件中,如下所示.
.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。
奇怪的是,请求被路由到处理程序,但这不是被发送到的文件名。此外,响应中缺少我的自定义调试头。当然,我做的第一件事就是用.
<?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在重写请求时给我提供了处理程序文件上的404错误,而不是当我直接访问处理程序时?为什么我的自定义调试头会丢失呢?
为了记录在案,我在MamP4.1.1中运行这个程序。
发布于 2017-08-25 21:18:41
当路径正确时,X将提供404 NOT页面,但该文件没有足够的读/写/执行权限。尝试将您的文件chmod为0644,然后再试一次,看看它是否解决了问题。
https://stackoverflow.com/questions/45092956
复制相似问题