来自任何子文件夹的Proxypass

时间:2013-09-05 16:24:23

标签: apache

我在proxypass(反向)方面并不是那么出色。所以任何帮助都会很棒。

这是我正在尝试做的事情:

我想将任何子目录传递给根URL。

所以点击mydomain.com/xxxx会传递给mydomain.com /

实现这一目标的最佳途径是什么。

推理目前我们有55种不同的变化。而且我不想为每个人创建一个ProxyPass(反向)行。

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要反向代理所有这些东西,因为域永远不会改变。但是,如果出于任何原因,你必须反向代理,你可以使用类似于ProxyPass的{​​{3}},除非你可以给它一个正则表达式模式:

ProxyPassMatch ^/(.+)$ http://mydomain.com/

不过,在我看来,你真正想要的是内部重写,而不是代表单个请求发送一个全新的请求:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index\.(php|html?)
RewriteRule ^(.+)$ / [L]

  

每个“子文件夹”实际上用于跟踪用户获取网址的位置(想想电视,广播等),但我们不想管理50多个版本的网页。因此,我们的想法是将其重定向到同一页面,捕获子目录值并使用该信息。理想情况下,查询字符串会很好,但我们被告知不要使用它们(可读性我猜)

如果您使用反向代理,则会丢失目标网页中的信息。这意味着,如果我转到http://foo.com/bar1,并且反向代理http://foo.com/index.php,则index.php脚本将不知道它是从/bar1代理的(尽管我认为你可以作为代理标题传递它。所以那种失败的目的。如果您在内部重写,如上所述,浏览器将全部隐藏,并且不会知道任何内部路由已经发生。如果您愿意,也可以传递查询字符串,因为所有内容都完全隐藏在浏览器中:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?subdir=$1 [L]

因此,根据这些规则,如果有人转到http://foo.com/tv并且/tv不是文件夹或文件,则会在内部路由到/index.php并将“tv”传递给该脚本作为GET参数“subdir”。