更新:仅限https://www.domain.com不起作用

更新:仅限https://www.domain.com不起作用

系统:Ubuntu 14.04,Apache 2.4.7

我希望所有请求http://域名.comhttps://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://域名.comhttps://domain.com有效。重定向自http://www.domain.comhttps://domain.com不起作用。重定向自https://www.domain.comhttps://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>

更新:仅限https://www.domain.com不起作用

我真傻:问题超出了服务器的范围!我没有在 DNS 区域中配置任何“www”子域。我已更正此问题,现在几乎解决了。

答案1

_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>

请注意使用捕获所有内容的重写规则,因为使用重定向仅匹配网址。

答案2

您尝试过使用 mod_rewrite 吗?您可以使用以下 mod_rewrite 规则完成相同的操作。

RewriteCond %{SERVER_PORT} 80 [OR,NC]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]

相关内容