系统: Ubuntu 14.04,Apache 2.4.7
我希望将所有对http://domain.com和https://domain.com的请求重定向到https://domain.com。我还想将请求重定向到"www“子域到主domain.com主机,而其他几个子域(tools.domain.com和phpmyadmin.domain.com)暂时可以通过http访问。
所有这些都应该通过domain.com的虚拟主机配置文件(下面的/etc/apache2/sites-available/domain.com.conf完整内容)直接完成,然后几次重新启动apache2服务。
从http://domain.com重定向到https://domain.com工作。从http://www.domain.com重定向到https://domain.com不起作用。从https://www.domain.com重定向到https://domain.com不起作用。
以下是虚拟主机文件的内容:
<VirtualHost *:*>
ServerName www.domain.com
Redirect permanent / https://domain.com/
</VirtualHost>
<VirtualHost _default_:80>
ServerName domain.com
Redirect permanent / https://domain.com/
LogLevel error
</VirtualHost>
<VirtualHost *:80>
ServerName tools.domain.com
DocumentRoot /var/www/domain.com/subdomains/tools/public
</VirtualHost>
<VirtualHost *:80>
ServerName phpmyadmin.domain.com
DocumentRoot /usr/share/phpmyadmin
</VirtualHost>
<VirtualHost _default_:443>
ServerName domain.com
DocumentRoot /var/www/domain.com/public
<Directory /var/www/domain.com/public>
Require all granted
</Directory>
# SSL CERTIFICATES
GnuTLSEnable on
GnuTLSExportCertificates on
GnuTLSCacheTimeout 500
GnuTLSCertificateFile /etc/ssl/certs/domain.com-certificate-125023.crt
GnuTLSKeyFile /etc/ssl/private/domain.com.key
GnuTLSPriorities NORMAL
</VirtualHost>愚蠢的我:问题超出了服务器!我没有在我的DNS区域中配置任何'www‘子域。我改正了,现在我快到了。
发布于 2015-02-04 17:02:37
_default_的意思是默认使用这样的配置:
<VirtualHost _default_:80>
...
</VirtualHost>
<VirtualHost _default_:443>
...
</VirtualHost>
<VirtualHost *:*>
...
</VirtualHost>最后一个虚拟主机在端口80和443上是不可访问的,因为这些端口上的任何请求都将由相关的_default_虚拟主机处理。*:*虚拟主机可能根本不需要(您期望公共用户使用更多的端口吗?)
因此,要使所需的一切都重定向到https://example.com,例如:
<VirtualHost *:443>
ServerName example.com
# SSL config
...
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
# SSL config
RewriteEngine On
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>注意捕获的使用-所有重写规则,因为使用重定向只匹配一个url。
https://serverfault.com/questions/664768
复制相似问题