使用PHP与xsendfile和自定义htaccess文件一起提供文件时出现问题

时间:2018-07-24 18:15:07

标签: php apache .htaccess x-sendfile

我在一个需要为研究论文和文件提供服务的项目中工作,因此在提供文件时,它需要检查很少的通过,如果一切看起来不错,则应该转发文件(研究文件)。

使用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

此处文件路径有效,但未找到文件!

enter image description here

尽管错误消息表明未找到index.php文件,但是如果您取消注释了这两行,

  // echo $file;
  // exit();

您将能够看到index.php文件实际上已被apache使用,它将打印文件的完整有效路径!

我已尽力让您理解该问题,但我无法真正理解导致此问题的原因。

编辑:/var/www/html/的文件夹树

enter image description here

编辑:xsendfile已安装并启用

enter image description here

1 个答案:

答案 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