0

我不擅长proxypass(反向)。所以任何帮助都会很棒。

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

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

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

实现这一目标的最佳方法是什么。

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

4

1 回答 1

1

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

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

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

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

每个“子文件夹”实际上用于跟踪用户从哪里获得 url(想想电视、收音机等),但我们不想管理 50 多个版本的页面。所以想法是将其重定向到同一页面,捕获子目录值并使用该信息。理想情况下,查询字符串会很好,但我们被告知不要使用它们(我猜是可读性)

如果您使用反向代理,则会丢失登录页面中的信息。这意味着如果我转到http://foo.com/bar1, 并且反向代理到http://foo.com/index.phpindex.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”传递给脚本。

于 2013-09-05T16:29:30.053 回答