仅当特定字符串在子域中匹配时,Apache ProxyPass

时间:2018-11-29 17:42:55

标签: apache redirect reverse-proxy virtualhost httpd.conf

我使用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,是否有任何工作可以实现相同的目标?

谢谢!

2 个答案:

答案 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>