反向代理使用URL令牌

我有一个工作在https://example.com YOURLS安装,它有一个手中充满了可以在URL中传递的触发器。

https://example.com/this是一个redirect,但是如果你用+前缀,以便得到https://example.com/+this我们得到一些自定义函数。 同样,如果我们将https://example.com/this+添加到URL的末尾,就像https://example.com/this+那样,我们可以显示一些统计信息等。

我如何通过子域代理这些function,以便当https://a.example.com/this被请求时,用户被呈现与来自https://example.com/+this相同的数据,但是在新的url,当https://b.example.com/this被请求时,用户看到的结果与https://example.com/this+相同?

this使用了一个字符集[a-zA-Z0-9]

我似乎无法得到任何与此。 我知道, mod_rewrite可以在这里帮助, mod_proxy将需要,可以匹配正则expression式, SSLPRoxyEngine on需要设置,什么是最好的方法?

尝试使用mod_rewrite / mod_proxy以下内容:

 RewriteEngine On # Request https://example.com/+this RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC] RewriteRule ^/?\+([a-zA-Z0-9]+)$ https://a.%1/$1 [P] # Request https://example.com/this+ RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC] RewriteRule ^/?([a-zA-Z0-9]+)\+$ https://b.%1/$1 [P] 

这假定this包含字母azAZ0-9 (关于注释更新)。 或者,您可以使用RewriteRule上的NCNOCASE – 不区分大小写)标志,并指定一个仅[a-z0-9] 。 或者,如果您准备好允许下划线,则可以使用\w速记字符类(与[A-Za-z0-9_] – “单词”字符相同)。 例如:

 RewriteRule ^/?(\w+)\+$ https://b.%1/$1 [P] 

更新:重读你的更新的问题后,我想我有逻辑倒过来! (虽然第一个工作?)尝试以下代替:

 # https://a.example.com/this TO https://example.com/+this RewriteCond %{HTTP_HOST} ^a\.(example\.com)$ [NC] RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/+$1 [P] # https://b.example.com/this TO https://example.com/this+ RewriteCond %{HTTP_HOST} ^b\.(example\.com)$ [NC] RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/$1+ [P] 

如果这些指令是在.htaccess那么RewriteRule 模式可以简化一点… /? 前缀可以省略。 所以, ^/?([a-zA-Z0-9]+)$变成^([a-zA-Z0-9]+)$

请注意,这些指令将需要在您的“前端控制器”之前靠近.htaccess文件的顶部,否则将不会被处理。

当代理到HTTPS(SSL协议)时,您将需要确保SSLProxyEngine On已在您的服务器configuration中设置。