.htaccess RewriteRule 不重定向文件,只重定向目录

问题描述 投票:0回答:1

过去几天我一直在尝试让 .htaccess RewriteRule 工作,但没有成功。在我工作的服务器上,有一个允许上传的网站。上传的文件存储在一系列目录中的文件夹中,例如

/content/uploads/photos/2023/04/<filename>
。一个示例文件名是:
upl_35fbde0e97c7be3b8d8c684f538adf0a.jpg

内容目录与我正在编辑的 .htaccess 文件位于文件系统的同一级别。

我不想直接提供文件,而是想在提供文件之前加载一个 PHP 文件 (

files.php?file=<filename>
) 来确定用户是否已登录。这应该很简单,我能够在我站起来的简化测试环境中的另一台服务器上轻松地工作。

我创建的RewriteRule是

RewriteRule ^content/uploads/(.*)$ files.php?file=$1 [L,QSA]
。我希望它将上述 URL 重定向到
/files.php?file=photos/2023/04/upl_35fbde0e97c7be3b8d8c684f538adf0a.jpg
,但是没有发生重定向。

如果我加载 URL

/content/uploads/photos/2023/04/upl_35fbde0e97c7be3b8d8c684f538adf0a.jpg
,文件将被提供,但不是来自
files.php
(因此,未经身份验证的用户可以访问)。如果我简单地砍掉文件名中的尾随“g”,使其与现有文件不匹配,它会加载
files.php
脚本(例如:
upl_35fbde0e97c7be3b8d8c684f538adf0a.jp
)。

我有点不知道为什么会这样,因为我在我的 .htaccess 文件中尝试了许多不同的配置,包括删除除此重定向规则之外的所有其他内容 - 但无济于事。任何建议或指示将不胜感激。

php apache .htaccess mod-rewrite
1个回答
1
投票

看起来你可能在为你的静态资产提供服务的前端代理后面(Nginx 通常用于此)。这符合“性能”的利益。如果是这种情况,那么 Apache/

.htaccess
将完全绕过静态文件请求。您需要配置代理以允许这些请求通过。检查 HTTP 响应标头(特别是
Server
标头)以获取有关从何处提供响应的线索。

否则,您发布的 mod_rewrite 规则似乎没问题,前提是它位于

.htaccess
文件的顶部,并且
files.php
也位于与
content
子目录相同的级别。

© www.soinside.com 2019 - 2024. All rights reserved.