Apache 使用 Rewrite 将 http 重定向到 https

Apache 使用 Rewrite 将 http 重定向到 https

在 OS X Yosemite 上使用 Apache 2.4。需要修改此虚拟主机,以便重定向http://server.kibanahttp://www.server.kibanahttps://server.kibana

这是 Vhost:

<VirtualHost *:8443>
            ServerName www.server.kibana
            ServerAlias server.kibana
            ServerAdmin [email protected]
           # RedirectPermanent http://server.kibana https://server.kibana
           # DocumentRoot /usr/local/var/www/kibana-4.0.2-darwin-x64/src/public
            SSLEngine on
            SSLCertificateFile "/usr/local/etc/apache2/2.4/ssl-keys/server.crt"
            SSLCertificateKeyFile "/usr/local/etc/apache2/2.4/ssl-keys/server.key"
        #
        # Proxy
        #
    ProxyRequests Off
    <Proxy *>
        Order Allow,Deny
        Allow from all
        AuthType Basic
        AuthName "Authenticated proxy"
        AuthUserFile /usr/local/etc/apache2/2.4/elastic.htpwd
        Require valid-user
    </Proxy>
        ProxyPass / http://127.0.0.1:5601
        ProxyPassReverse / http://127.0.0.1:5601
        RewriteEngine on
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule .* http://127.0.0.1:5601%{REQUEST_URI} [P,QSA]
            ErrorLog /usr/local/var/log/apache2/kibana_error.log
            LogLevel warn
            CustomLog /usr/local/var/log/apache2/kibana_access.log combined
</VirtualHost>

有什么建议可以添加什么或如何修改 RewriteRule 和 RewriteCond 吗?谢谢!

答案1

您可以使用它,并重写为您的证书颁发给的域:

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*) https://www.example.com$1 [R=301,L]

或者在您想要强制实施 SSL 的地方使用此包含文件,同时启用对服务器部分内容的 HTTP 访问。

# Script to require SSL

<If "%{HTTPS} == 'on'">
    SSLOptions +StrictRequire
    SSLRequireSSL
</If>
<Else>
    RedirectMatch permanent ^/?(.*) https://www.example.com/$1
</Else>

您可以使用%{SERVER_NAME}而不是www.example.com。这适用于普通证书。

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R=301,L]

变量%{HTTP_HOST}包含请求中的主机名,可以代替www.exaxmple.com。但是,这可能不是与证书匹配的主机名。它适用于多域证书。

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*) https://%{HOST_NAME}$1 [R=301,L]

添加UseCanonicalName dns到您的配置UseCanonicalName dns将提供SERVER_NAME来自 DNS 的信息。但是,您需要确保 DNS 提供所需的域。如果此操作成功,您可能能够对所有服务器使用相同的配置。或者,您可以包含一个特定于服务器的小型文件来提供服务器名称。

您确实需要监听 HTTP 和 HTTPS 的不同端口。在启用重写之前,请先测试每个端口。这是用于监听 HTTP 和 HTTPS 并将所有请求重定向到 HTTPS 的站点的最低配置。如果使用非标准端口,则重定向将需要一个端口。此配置依赖于在虚拟主机定义之外配置的目录访问。

<VirtualHost *:80 *:443>
    ServerAdmin [email protected]
    DocumentRoot /var/www/
    ServerName  www.example.com
    ServerAlias example.com

    SSLEngine On
    SSLCipherSuite HIGH:MEDIUM
    SSLCertificateFile      /etc/ssl/certs/www.example.com-cert.pem
    SSLCertificateKeyFile   /etc/ssl/private/www.example.com-key.pem
    SSLCACertificatePath    /etc/ssl/certs/

    RewriteEngine On
    RewriteCond %{HTTPS} !=on [NC]
    RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R=301,L]

</VirtualHost>

答案2

尝试在“RewriteEngine on”下面添加此代码,看看是否有效。

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://server.kibana/$1 [R=301,L]

相关内容