我有一个工作你的安装位于https://example.com
,它有一堆可以通过 URL 传递的触发器。
https://example.com/this
充当重定向,但如果您this
在前缀中添加+
so,https://example.com/+this
我们就会得到一些自定义函数。同样,如果我们将 添加到+
URL 末尾,例如 so,https://example.com/this+
我们就可以显示一些统计数据等。
我将如何通过子域代理这些功能,以便在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
是必需的,可以匹配正则表达式,并且SSLPRoxyEngine on
需要设置,最好的方法是什么?
答案1
使用 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
仅由字符a-z
、A-Z
和组成0-9
(根据注释进行了更新)。或者,您可以在 上使用NC
(NOCASE
- 不区分大小写)标志RewriteRule
并指定图案只是[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
在服务器配置中设置了它。