子目录中特定文件类型的Apache代理/重写设置 最近我不得不迁移将近15岁的SoeSITE,认为新的URL是

子目录中特定文件类型的Apache代理/重写设置 最近我不得不迁移将近15岁的SoeSITE,认为新的URL是,apache,mod-rewrite,reverse-proxy,Apache,Mod Rewrite,Reverse Proxy,旧站点为(内部IP:192.168.1.15,在公共域中不可用) 在旧站点中,它有一个名为“sitefiles”的目录,其中有许多子文件夹和文件,如图像、文件等 所以我想实现的是,假设用户在浏览器上点击url,这是带有白色扩展名的文件请求,例如(.jpg、.jpeg、.png、.pdf、.doc、.docx、.gif、.svg),然后从内部IP服务这些请求 请注意sitefiles目录相当大,并且是嵌套的,我不知道如何处理这个问题,目前我尝试的是 ProxyPass /sitefiles/

旧站点为(内部IP:192.168.1.15,在公共域中不可用)

在旧站点中,它有一个名为“sitefiles”的目录,其中有许多子文件夹和文件,如图像、文件等

所以我想实现的是,假设用户在浏览器上点击url,这是带有白色扩展名的文件请求,例如(.jpg、.jpeg、.png、.pdf、.doc、.docx、.gif、.svg),然后从内部IP服务这些请求

请注意sitefiles目录相当大,并且是嵌套的,我不知道如何处理这个问题,目前我尝试的是

ProxyPass /sitefiles/ http://192.168.1.15/sitefiles
ProxyPassReverse /sitefiles/ http://192.168.1.15/sitefiles
但是

  • 我该怎么做才是真正的白名单的要求是白名单文件
  • 文件的绝对路径对我来说真的是不可预测的,我们可以传递这样的消息吗
ProxyPass%{REQUEST\u URI}http://192.168.1.15/$1

我也试过了,下面的一个给了我一个错误的请求,你的浏览器发送了一个这个服务器无法理解的请求

RewriteCond %{REQUEST_URI} ^/sitefiles
RewriteRule ^\/?(.*)$ http://192.168.1.15/$1 [P,L]

如果我将
[p,L]
修改为
[R=301,L]
它将正确重定向到其他服务器,不确定代理为什么不工作以允许某些白名单扩展,您可以使用mod_重写规则而不是
ProxyPass

RewriteEngine On

RewriteRule ^sitefiles/.+\.(?:jpe?g|png|pdf|docx?|gif|svg|pptx?)$ http://192.168.1.15/$0 [L,NC,P]
此规则中的
p
标志执行
ProxyPass
为您执行的操作


这假设在Apache配置中正确设置了
mod\u代理。

为什么白名单很重要?如果浏览器请求一个未知的扩展名,如
.txt
,那么它只会在
ProxyPass
后产生404前进。@anubhava:先生,如果有很多文件,我只允许几个扩展名,如pdf jpeg jpg png svg doc docx pptpptx@anubhava:先生,我尝试了更多的重写尝试,请参阅更新,但是没有成功我收到了400个错误请求,这可能是什么问题?当您使用标记作为
[L,NC]
时会发生什么?如果没有
P
,如果我使用,浏览器正在下载文件,但使用
P
其400,这意味着
mod\u proxy
未正确设置。你必须联系你的站点支持。我在另外一台机器上测试了你的代码,它有
代理模块(共享)代理模块(共享)代理模块(ajp)代理模块(共享)代理模块(共享)平衡模块(共享)代理连接模块(共享)代理快捷模块(共享)代理模块(共享)fcgi模块(共享)代理fdpass模块(共享)代理ftp模块(共享)代理\u http\u模块(共享)代理\u scgi\u模块(共享)代理\u wstunnel\u模块(共享)
非常感谢,您救了我