【问题标题】:if-then-else condition in apache virtual hostapache虚拟主机中的if-then-else条件
【发布时间】:2014-02-06 11:43:28
【问题描述】:

我有一个为https ://sb.domain1.com 定义的 Apache 虚拟主机,我需要根据调用虚拟主机的 IP 地址执行不同的操作。如果电话来自172.16.xxx.yyy,那么我需要重定向到http ://sb.domain2.com,否则我需要重定向到http ://sb.domain1.com

那是我不知道如何翻译以下几行(来自 /etc/http/conf.d/ssl.conf 文件):

<VirtualHost 192.168.254.68:443>
    ServerName sb.domain1.com
    SSLProxyEngine on
    SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
    SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
    SSLCertificateChainFile /etc/httpd/conf/ssl.crt/STAR.ca-bundle
    SSLEngine on
    SSLSessionCacheTimeout 600
    if IP = 172.16.xxx.yyy
        then 
           Redirect to http ://sb.domain2.com
        else
           ProxyPass / http ://sb.domain1.com/
           ProxyPassReverse / http ://sb.domain1.com/
        else
    ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/sb/ssl_error_log 86400"
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/sb/ssl_access_log 86400" combined
</VirtualHost>

你能建议我翻译上述指令吗?

【问题讨论】:

    标签: apache mod-rewrite virtualhost


    【解决方案1】:

    类似的东西应该可以工作:

    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} ^172\.16\.
    RewriteRule ^/(.*) http://sb.domain2.com/$1 [L,QSA]
    

    然后只是

    ProxyPass / http://sb.domain1.com/
    ProxyPassReverse / http://sb.domain1.com/
    

    毕竟如果匹配到IP,就会被重定向,所以这里不会再做其他请求了。然后将代理其他所有人。

    【讨论】:

    • 非常感谢您的回复,mrjink。由于我不是很喜欢重写,我想知道这行是什么意思: RewriteRule ^/(.*) sb.domain2.com/$1 [L,QSA] 如果我的 IP 在 172.16.xxx.yyy 并且我输入了 sb.domain1.com/pippo.txt i将被重定向到sb.domain2.come/pippo.txt ?真的非常感谢你
    • 是的,就是这样。如果这不是您想要的,您可以从 RewriteRule 中删除 $1 和 QSA,您将被重定向到普通域(没有 pippo.txt)。另外,请参阅wiki.apache.org/httpd/Rewrite 的优秀 wiki 页面。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2018-05-03
    • 2012-09-27
    • 2011-06-19
    • 2012-08-11
    • 2019-08-25
    • 2012-04-26
    相关资源
    最近更新 更多