我在一个需要为研究论文和文件提供服务的项目中工作,因此在提供文件时,它需要检查很少的通过,如果一切看起来不错,则应该转发文件(研究文件)。
使用PHP读取文件并将其流化很容易,但是我们需要使用apache xsendfile
来提供文件。
应用程序的工作方式有所不同,但是我做了一个像这样的小项目,以便我们可以重现问题。
所有请求都转到IP地址,并使用.htaccess
文件将请求重定向到index.php
文件。
这是htaccess文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
XSendFile On
它将在index.php
中决定要提供的文件。这是index.php
的代码:
<?php
$file =
__DIR__
. '/scholar'
. $_SERVER[ 'REQUEST_URI' ]
. 'index.html';
// echo $file;
// exit();
header("Content-type: " . mime_content_type( basename( $file ) ));
header("X-Sendfile: " . $file );
在$file
变量中,它将生成所请求研究论文的完整路径。
http://dev.edu/project-1/
/var/www/html/scholar/project-1/index.html
此处文件路径有效,但未找到文件!
尽管错误消息表明未找到index.php
文件,但是如果您取消注释了这两行,
// echo $file;
// exit();
您将能够看到index.php
文件实际上已被apache使用,它将打印文件的完整有效路径!
我已尽力让您理解该问题,但我无法真正理解导致此问题的原因。
编辑:/var/www/html/
的文件夹树
编辑:xsendfile已安装并启用
答案 0 :(得分:0)
拥有.htaccess可以为您完成所有工作:
RewriteEngine on
RewriteRule ^project-1$ /scholar/project-1/index.html
RewriteRule ^project-2$ /scholar/project-2/index.html
如果您输入网址http://localhost/project-1,它将把您定向到project-1的文件夹
我现在刚刚测试过。
如果您想在网址中添加斜杠以避免404,则只需更改
RewriteEngine on
RewriteRule ^project-1/$ /scholar/project-1/index.html
RewriteRule ^project-2/$ /scholar/project-2/index.html