我在一个项目中工作,它需要服务的研究论文和文件,所以在服务文件时,它需要检查一些通行证,如果一切看起来都很好,那么它应该转发文件(研究论文)。
读取文件并使用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
变量中,它将生成所需研究论文的完整路径。
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
让.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制作),所以,看看文档,我最终尝试