当前位置: 首页 > 知识库问答 >
问题:

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

颛孙喜
2023-03-14

我在一个项目中工作,它需要服务的研究论文和文件,所以在服务文件时,它需要检查一些通行证,如果一切看起来都很好,那么它应该转发文件(研究论文)。

读取文件并使用PHP进行流式处理很容易,但我们需要使用apachexsendfile来提供文件。

应用程序的工作方式不同,但是我做了一个像这样的小项目,这样我们可以重新产生问题。

所有请求都指向一个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变量中,它将生成所需研究论文的完整路径。

  • 请求的URL: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

共有1个答案

齐弘业
2023-03-14

让.htaccess为您完成所有工作:

RewriteEngine on
RewriteRule ^project-1$ /scholar/project-1/index.html
RewriteRule ^project-2$ /scholar/project-2/index.html

如果您输入urlhttp://localhost/project-1 它将引导您进入project-1的文件夹

我现在刚测试过。

如果您希望在url中包含尾随斜杠以避免404,那么只需更改

    RewriteEngine on
    RewriteRule ^project-1/$ /scholar/project-1/index.html
    RewriteRule ^project-2/$ /scholar/project-2/index.html
 类似资料:
  • 我的log4j2属性文件如下所示- 当我试图使用以下代码访问appender时 它将条目记录在SeriesIn响应appender中,而不是ejdk appender中。我的log4j2有多个自定义appender。我需要在不同的类文件中使用不同的appender,它应该将条目记录在正确的文件中。

  • 问题内容: 我正在编写一个小型CMS,以更好地了解它们的工作方式并学习有关PHP的一些新知识。但是,我遇到了一个问题。 我想使用mod_rewrite(尽管如果有人有更好的解决方案,我会尝试使用它)来生成漂亮的干净URL,所以site.com/index.php?page=2可以改为site.com/tools 据我了解,每次添加新页面时,我都需要更改.htaccess文件,这是我遇到问题的地方,

  • 我们正在将我们的事件系统迁移到函数式编程模型。我们遵循了下一个“指南”,它对消费者非常有效,但使用StreamBridge的生产者没有正确创建消息。 我们有下一个错误: 我们正在使用< code > 2021 . 0 . 0 spring-cloud版本。 通过简单的配置: 这是我们的自定义,它用于我们所有的微服务,因此,保持消息的格式很重要: 我们还使用< code>StreamBridge来生

  • 我不能通过nGinx提供静态文件,而是得到404。我可以看到错误(如error.log所示),我只是不知道如何修复它。 网址。派克 settings.py (收集了一个静态文件,所有静态文件现在都在“staticfiles/”中) nginx配置 基础html 这是日志 错误日志 (静态/添加在静态url中,我看不出为什么)

  • 故事 我用的是keycloak 6.0.1。我有一个领域有两种类型的用户:管理员和常规用户。我需要一个主题,可以区分他们之间,因为登录是不同的(3字段vs 2字段)。因此,我希望扩展提供程序FreeMarkerLoginFormsProvider以传递一个自定义参数。我正在使用keycloak部署器部署我的SPI。 Keycloak在部署时不幸引发异常: 我也尝试过模块方法,但得到一个NullPo

  • 我只是想制作一个小而简单的应用程序(两年前我已经在Objective-C和api V1中制作了这个应用程序),它显示一个屏幕,上面有事件时间和描述,还有一个按钮:“在日历中插入事件”。显然,每个用户都必须用自己的谷歌用户名和密码配置应用程序。该应用程序使用第一个可用日历简化了一些过程。 我在尝试使用javascript时遇到了无限的问题(这个应用程序将用html5制作),所以,看看文档,我最终尝试