我想要实现的目标如下: 我希望有许多子域名,例如 abc.domain.com 重定向到网址,例如 www.domain.com/something?subdomain=abc
由于我重定向到完全限定的域,我需要使用反向代理来避免在浏览器中更改URL。 (使用[P]标志并打开mod_proxy模块和其他一些模块)
这是我的DNS设置
*.domain.com. 14400 A 111.111.11.1
这是我对apache的虚拟主机配置
<VirtualHost 111.111.11.1:80>
ServerName www.domain.com
ServerAlias *.lionite.com
DocumentRoot /var/www/html
ErrorLog /var/www/logs
UseCanonicalName off
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain\.com(.*) http://www.domain.com/something?subdomain=$1 [P,L]
此设置工作正常(如果您认为可以改进,请告诉我们)。
我的主要问题是当我尝试设置https://
时这是我对apache的虚拟主机配置
<VirtualHost 111.111.11.1:443>
ServerName www.domain.com:443
ServerAlias *.domain.com
DocumentRoot /var/www/html
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/httpd/conf.d/cert/server.crt
SSLCertificateKeyFile /etc/httpd/conf.d/cert/server.key
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{HTTPS_HOST} !^www\.domain\.com$
RewriteRule ^(.+) %{HTTPS_HOST}$1 [C]
RewriteRule ^([^.]+)\.domain\.com(.*) https://www.domain.com/something?subdomain=$1 [P,L]
</VirtualHost>
每当我打电话给https://abc.domain.com时 - 我得到的回复是主页,但无论我追加到子域的末尾,我都会得到相同的回复。这就像重写没有很好的反应。
任何帮助都将不胜感激,或者您可以分享如何设置反向代理,重写,通配符子域和SSL一起
谢谢,
答案 0 :(得分:1)
我也遇到过同样的问题。我解决它的唯一方法是在不同的侦听端口上放置需要安全连接的不同域,因为我的IP地址有限。
根据我的理解,问题是在https协议中HOST不包含在请求中。因此,当请求到达服务器时,apache只使用接收连接的IP和端口上的第一个匹配,因为它不知道请求的域。
唯一的解决方法是为每个域或不同的端口使用不同的IP。
不幸的是,使用带有通配符域设置的https时运气不佳,我不相信无论如何都可以使用它。