当前位置: 首页 > 知识库问答 >
问题:

Apache 虚拟主机将 http 重定向到 https

魏誉
2023-03-14

我知道这个问题已经被问过很多次了。然而,我似乎无法将其用于我的场景。

我想将所有 http 流量重定向到 https,并将 https 根重定向到登录页面。这是我在 vhost.conf 文件中的虚拟主机。

<VirtualHost *:80>
    DocumentRoot /var/www
    ServerName sub-domain.mydomain.com
    ServerAdmin admin@example.com
    CustomLog /var/log/httpd/http_access.log common
    LOGFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
    ErrorLog /var/log/httpd/http_error.log
    TransferLog /var/log/httpd/http_transfer.log

    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1
    #Redirect permanent / https://%{HTTP_HOST}%/login/mylogin.jsp (Not used as I need to use a rewrite rule rather than redirect only the root)
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www
    ServerName sub-domain.mydomain.com
    ServerAdmin admin@example.com
    CustomLog /var/log/httpd/https_access.log common
    LOGFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
    ErrorLog /var/log/httpd/https_error.log
    TransferLog /var/log/httpd/https_transfer.log

    SSLEngine on
    SSLOptions +StrictRequire
    SSLCertificateFile /etc/httpd/conf/mydomain.crt
    SSLCertificateKeyFile /etc/httpd/conf/mydomain.key
    SSLCertificateChainFile /etc/httpd/conf/intermediate.crt

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)- ref https://mozilla.github.io/server-side-tls/ssl-config-generator/
    Header always set Strict-Transport-Security "max-age=15768000"

    JkMount .....  

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
        SSLRequireSSL
    </Directory>

    BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

    AddDefaultCharset utf-8
    AddType image/svg+xml svg svgz
    AddEncoding gzip svgz

    RewriteEngine on
    RewriteRule ^/$ /login/mylogin.jsp [R=permanent,L]
</VirtualHost>

https根登录重定向工作正常。但是,我无法让超文本传输协议https重定向工作。我尝试了各种建议,如;

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1
RewriteRule ^/?(.*) https://%{SERVER_NAME}/%$1

根据这里的各种帖子。但是其中一些不起作用,在一些建议中,有评论提到查询字符串不适用于%{REQUEST_URI}变量。

我需要一个好的解决方案,将所有http流量重定向到https,同时保留其余的请求url。例如

http://sub-domain.mydomain.comhttps://sub-domain.mydomain.com

http://sub-domain.mydomain.com/somepage.htmlhttps://sub-domain.mydomain.com/somepage.html

http://sub-domain.mydomain.com/thepage.html?day=tuesday

一旦我测试过并对重定向工作满意,我将使重定向永久化。

我不想使用htAccess请。

共有1个答案

宗政子琪
2023-03-14

您已经处理了从“/”到“/login/mylogin.jsp”的具体重定向,所以它应该可以工作。要将所有http流量重定向到HTTPS,可以使用RedirectMatch。

<VirtualHost *:80>
    DocumentRoot /var/www
    ServerName sub-domain.mydomain.com
    ServerAdmin admin@example.com
    CustomLog /var/log/httpd/http_access.log common
    LOGFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
    ErrorLog /var/log/httpd/http_error.log
    TransferLog /var/log/httpd/http_transfer.log

    RedirectMatch permanent ^/(.*)$ https://sub-domain.mydomain.com/$1

</VirtualHost>
 类似资料:
  • 主要内容:Apache虚拟主机类型,3. 虚拟主机配置示例Apache Web服务器可以在SAME服务器上托管多个网站。每个网站不需要单独的服务器机器和apache软件。这可以使用虚拟主机或VHost的概念来实现。 要在Web服务器上托管的任何域(网站应用)都将在apache配置文件中具有单独的条目。 Apache虚拟主机类型 Apache虚拟主机类型有两种 - 基于名称的虚拟主机 基于地址或基于IP的虚拟主机。 1. 基于名称的虚拟主机 基于名称的虚拟

  • Chrome版本:67.0.3396.87 Web服务器:Apache 当我击中http://www.assignmenthelpdesk.local,它将重定向到https://www.assignmenthelpdesk.local/ 如何阻止MAMP重定向到https?提前感谢。 /Applications/MAMP/conf/apache/extra/httpd vhosts。详情如下:

  • 我需要配置我的Tomcat 9服务器,将http重定向到https流量。 我尝试过: > < li> 对http端口使用连接器,并具有指向安全连接器的redirectPort属性。 在web.xml底部包括一个安全约束链接,它适用于其他不使用虚拟主机的Tomcat服务器 连接器 安全约束 服务器中的主机配置.xml < Li > https://example 2 . com-Works < Li

  • APP1在端口80上使用Apache2 APP2在端口81上使用IIS App3在端口83上使用Xampp Apache 我已经为每个端口1有了一个域。端口80 2的domain1.com。端口81 3的domain2.com。端口83的domain3.com 所有域都指向服务器,当我在域后面使用(:port)时,它工作得很好,例如。域1:83已经在端口83上打开了Xampp Apache。 每个

  • 在我的apache服务器上,我希望能够将所有传入的http请求重定向到等效的https请求。问题是,我希望能够在不指定的情况下为我的默认虚拟主机执行此操作,并使用请求url中出现的任何服务器名称进行重定向。我希望得到这样的东西: 这是可以使用还是我必须求助于?

  • 术语"虚拟主机"是指在一个机器上运行多个网站(比如:www.company1.com和www.company2.com)。如果每个网站拥有不同的IP地址,则虚拟主机可以是"基于IP"的;如果只有一个IP地址,也可以是"基于主机名"的,其实现对最终用户是透明的。 Apache是率先支持基于IP的虚拟主机的服务器之一。1.1及其更新版本同时支持基于IP和基于主机名的虚拟主机,今后,不同的虚拟主机有时会