重写 Apache2 路径以在使用位于 DocumentRoot 中的 FallbackResource 之前在子目录中查找

Rewriting Apache2 paths to look in a subdirectory before using a FallbackResource located in the DocumentRoot

提问人:D.H. 提问时间:10/31/2023 最后编辑:D.H. 更新时间:11/3/2023 访问量:32

问:

所以这个软件有一个 nginx 配置,看起来像这样:

location / {
    try_files /static$uri /router.php?$args;
}
location /router.php {
    include snippets/fastcgi-php.conf;
}

不幸的是,如果不考虑实际功能,这似乎不可能用 Apache2 实现,如果想要将软件部署在无法直接访问服务器的共享 Web 托管环境中,这会带来问题......

(有问题的项目是 ROllerozxa 和 SN76489/Compa 的“Cirrusboard”......

目前,我们(我和主要开发人员)让Apache与新路由器一起工作。FallbackResource router.php

但是,这会破坏所有静态资产,因为它们位于 static/ 中。

我不确定如何在不创建 RewriteRule 的情况下做到这一点,当我尝试创建 RewriteRule 时,它不起作用,它只是不断抛出 500 个错误。此外,它也不会使用 nginx 复制 1:1 的功能,即在考虑路由器 .php 之前,首先查看静态/中是否存在文件。将 DocumentRoot 作为静态目录也可能破坏事情,因为我认为您不能使用相对和/或绝对路径执行 FallbackResource(特别是如果我们考虑任何非自我管理的托管,例如共享主机,我们的项目非常考虑这一点)。

php mod-rewrite apache2 url 路由

评论

0赞 D.H. 10/31/2023
对不起,所有的编辑
0赞 Kazz 10/31/2023
使用ModRewrite,您可以使用类似的东西,然后在文件存在时使用RewriteRule转发此请求,当文件不存在时,您只需转到路由器.php的另一个RewriteRule,似乎是常规的php处理机制,在apache中根据文件扩展名以不同的方式处理,因此您不需要手动配置这样的事情, 在我眼中,这就是 1:1 的功能RewriteCond /static/%{REQUEST_URI} -flocation /router.php

答:

0赞 D.H. 11/3/2023 #1

我们的主要程序员 (rollerozxa) 想通了,这在一定程度上要归功于 Kazz/7028432 在这里的评论

Options -Indexes
DirectoryIndex this-file-shouldnt-exist.txt

RewriteEngine on

RewriteCond %{DOCUMENT_ROOT}/static/%{REQUEST_URI} -f
RewriteRule ^(.*)$ /static/$1 [END]

FallbackResource /router.php

非常感谢,希望有人发现它在未来 x3 中有用