Mod rewrite 在apache 2.2.3上设置通配符子域(使用反向代理)
我正在努力实现以下目标: 我希望有许多子域(如abc.domain.com)重定向到url(如www.domain.com/something?subdomain=abc) 因为我正在重定向到一个完全限定的域,所以我需要使用反向代理来避免更改浏览器中的URL。(使用[P]标志并打开mod_代理模块和其他一些模块) 这是我的DNS设置 这是我的apache虚拟主机配置Mod rewrite 在apache 2.2.3上设置通配符子域(使用反向代理),mod-rewrite,ssl,wildcard,reverse-proxy,apache,Mod Rewrite,Ssl,Wildcard,Reverse Proxy,Apache,我正在努力实现以下目标: 我希望有许多子域(如abc.domain.com)重定向到url(如www.domain.com/something?subdomain=abc) 因为我正在重定向到一个完全限定的域,所以我需要使用反向代理来避免更改浏览器中的URL。(使用[P]标志并打开mod_代理模块和其他一些模块) 这是我的DNS设置 这是我的apache虚拟主机配置 服务器名www.domain.com ServerAlias*.lionite.com DocumentRoot/var/www
服务器名www.domain.com
ServerAlias*.lionite.com
DocumentRoot/var/www/html
ErrorLog/var/www/logs
UseCononicalName关闭
重新启动发动机
重写cond%{REQUEST_URI}^/图像
重写cond%{HTTP_HOST}^www\.domain\.com$
重写规则^(+)%{HTTP_HOST}$1[C]
重写规则^([^.]+)\.domain\.com(.*)http://www.domain.com/something?subdomain=$1[P,L]
此设置运行良好(当然,如果您认为可以改进,请告诉我)
我的主要问题是当我试图设置https://
这是我的apache虚拟主机配置
服务器名www.domain.com:443
ServerAlias*.domain.com
DocumentRoot/var/www/html
斯伦金安
SSLProtocol all-SSLv2
SSLCipherSuite全部:!ADH:!出口:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile/etc/httpd/conf.d/cert/server.crt
SSLCertificateKeyFile/etc/httpd/conf.d/cert/server.key
发展+标准
SetEnvIf用户代理“*MSIE.*”\
nokeepalive ssl不干净关闭\
降级-1.0力响应-1.0
自定义日志/ssl请求日志\
%t%h%{SSL\u协议}x%{SSL\u密码}x\%r\%b
重新启动发动机
重写cond%{REQUEST_URI}^/图像
重写cond%{HTTPS_HOST}^www\.domain\.com$
重写规则^(+)%{HTTPS_HOST}$1[C]
重写规则^([^.]+)\.domain\.com(.*)https://www.domain.com/something?subdomain=$1[P,L]
无论何时我呼叫-我得到的响应是主页,但无论我在子域的末尾附加什么,我都会得到相同的响应。好像重写的反应不太好
如果您能分享如何设置反向代理、重写、通配符子域和SSL,我们将不胜感激
谢谢,我也有同样的问题。我解决这个问题的唯一方法是将需要安全连接的不同域放在不同的侦听端口上,因为我的IP地址有限 据我所知,问题是在https协议中,主机未包含在请求中。因此,当请求到达服务器时,apache只使用接收连接的IP和端口上的第一个匹配项,因为它不知道请求的域 唯一的解决办法是为每个域使用不同的IP或不同的端口
不幸的是,您在使用https进行通配符域设置时运气不好,我认为无论如何都没有办法让它正常工作。这个问题更适合serverfault.com。我已经在serverfault.com上发布了这个问题,没有收到任何答案,我决定也在这里发布。尝试做类似的事情,找到了这个答案。我相信这是可以做到的。每个请求都会发送主机头,但这成为一个问题的地方是基于名称的虚拟主机。必须首先处理SSL层,然后apache才能访问主机头。这意味着您不能使用SSL实现基于名称的虚拟主机。但是,您应该能够对重定向执行Adam想要的操作,因为SSL层已经被处理,并且主机头将可用于重写指令。我在文档中没有看到提到HTTPS\u主机,所以也许应该使用HTTP\u主机?
*.domain.com. 14400 A 111.111.11.1
<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]
<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>