我使用apache作为反向代理,只有当我的子域匹配特定的字符串时,才有任何方法可以通过ProxyPass
<VirtualHost *:80>
ServerAlias *.example.com
<If "%{HTTP_HOST} -strmatch 'hello*.example.com'">
ProxyPreserveHost On
ProxyPass "/" "http://192.168.1.22/"
ProxyPassReverse "/" "http://192.168.1.22/"
</If>
</VirtualHost>
不可能在“ If”中使用ProxyPass,是否有任何工作可以实现相同的目标?
谢谢!
答案 0 :(得分:0)
我认为您可以使用Regex或RewriteCond,我将为这个问题解释我的解决方案:
由于您要匹配完全相同的字符串,因此可以排除您要查找的字符串之外的所有内容,如果可用,我为您编写了一个RewriteCond:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.*\.example\.com[NC]
RewriteCond %{HTTP_HOST} !=hello.example.com[NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
此代码应该可以正常工作,如果不能,我将使用不同的方法搜索正则表达式条件以制作相同的模式,但不包括除与hello.example.com匹配的子域之外的所有子域
我还有其他代码
RewriteCond %{HTTP_HOST} (^|\.)example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^(hello)\.example\.com$ [NC]
RewriteRule ^ http://hello.example.com%{REQUEST_URI} [NE,R=301,L]
答案 1 :(得分:0)
我会尝试使用mod_rewrite和Proxy指令。
<VirtualHost *:80>
ServerName *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hello*\.example\.com$
RewriteRule ^/(.*)$ http://192.168.1.22/$1 [proxy]
ProxyPassReverse / http://192.168.1.22/
</VirtualHost>