【问题标题】:Apache ProxyPass - Regex to Exclude FilesApache ProxyPass - 正则表达式排除文件
【发布时间】:2019-03-19 18:55:46
【问题描述】:

我正在尝试排除所有以 "dgg-" 开头并以 ".xml" 结尾的文件,例如:dgg-file-1。 xml 使用 apache 代理。

这行得通:

ProxyPass /myfile.xml ! # single file
ProxyPass /directory ! # all files inside dir

这不起作用:

ProxyPass /dgg-(.*)\.xml !

我怎样才能做到这一点?

ps- 我在httpd.conf->virtualhost 中使用此代码不是 .htaccess

【问题讨论】:

  • 定义“不起作用”?文件中还有什么内容?

标签: regex apache mod-rewrite load-balancing proxypass


【解决方案1】:

使用ProxyPassMatchProxyPass 需要完整的路径元素,它不接受正则表达式。

由于ProxyPassMatch 采用正则表达式,这意味着您还必须锚定它:

ProxyPassMatch ^/dgg-[^.]+\.xml$ !

【讨论】:

  • 这正是我所需要的。谢谢!
【解决方案2】:

我有一种情况,我想从 Apache 网络服务器中挑选一些图像,并从应用程序服务器(在我的例子中是 Jboss)中包含一些图像。 所以我想要一个既要排除又要包含的正则表达式。这是我在 VirtualHost 标签下添加到 httpd.conf 文件的内容。

我们在 jsf jars 和 jenia popup jars 中有一些 css 和 js 文件 在网络服务器上找不到。因此,请联系应用服务器。正则表达式正在查找所有 *.js 和 *.css url,但排除其中包含 /jenia4faces 和 /faces 的任何 url。这是为了确保像 /MYWEBAPP/jenia4faces/popup/popupFrame/js/popupFrame.js 和 /MYWEBAPP/faces/myFacesExtensionResource/tabbedpane.HtmlTabbedPaneRenderer/11302665/dynamicTabs.js 这样的脚本仍然从应用服务器中提取。其余所有 .js 和 .css 将由 webserver 提供服务。

  ProxyPassMatch ^(/MYWEBAPP/(?!jenia4faces).*\.js)$ !
  ProxyPassMatch ^(/MYWEBAPP/(?!faces).*\.css)$ !
  ProxyPassMatch ^(/MYWEBAPP/(?!jenia4faces).*\.js)$ !
  ProxyPassMatch ^(/MYWEBAPP/(?!faces).*\.css)$ !

/MYWEBAPP 是我的网络应用程序根上下文。 另外 (?!faces) 是判断 url 在 url 路径中是否没有“faces”。

【讨论】:

  • 谢谢!谢谢!谢谢!我正在使用带有 php5-fpm 的 Apache 2.4 和 fcgi 的 ProxyPassMatch。但是,将文件夹排除在通过之外越来越令人沮丧。在寻找解决方案一段时间后,这终于成功了。以防万一其他人需要查看它是如何协同工作的(例如,对于文件夹不应允许 php 执行的 Drupal 安装):ProxyPassMatch ^(/sites/default/files/(.*\.php(/.*)?))$ !ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:8000/var/wwwAddHandler php5-fcgi .php
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
相关资源
最近更新 更多