首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在没有ServerName的默认虚拟主机上将HTTPS重定向到HTTPS

在没有ServerName的默认虚拟主机上将HTTPS重定向到HTTPS
EN

Stack Overflow用户
提问于 2012-07-24 05:47:53
回答 3查看 178.5K关注 0票数 78

在我的apache服务器上,我希望能够将所有传入的http请求重定向到等效的https请求。问题是,我希望能够在不指定ServerName的情况下对我的默认虚拟主机执行此操作,并让重定向与请求url中出现的任何服务器名称一起工作。我希望是这样的:

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

这可以使用Redirect吗?还是我必须求助于Rewrite

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-24 05:59:10

尝试在vhost配置中添加以下内容:

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
票数 113
EN

Stack Overflow用户

发布于 2015-01-16 11:30:05

两者都工作得很好。但根据Apache docs的说法,您应该避免使用mod_rewrite进行简单的重定向,而应使用Redirect。因此,根据他们的说法,你最好这样做:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Redirect之后的第一个/是url,第二部分是它应该重定向的位置。

您还可以使用它将URL重定向到子域:Redirect /one/ http://one.example.com/

票数 86
EN

Stack Overflow用户

发布于 2019-10-27 01:07:38

我已经使用mkcert创建了带有效*.dev.net /SSL证书的无限HTTPS子域名和本地主机(Windows10 XAMPP和Linux Debian10 Apache2)

我使用mkcert v1.4.0在Windows上创建证书(以管理员身份执行CMD ):

mkcert -install
mkcert localhost "*.dev.net"

这将在Windows 10中创建此文件(我将首先在Windows 10 XAMPP中安装它)

localhost+1.pem
localhost+1-key.pem

覆盖XAMPP默认证书:

copy "localhost+1.pem" C:\xampp\apache\conf\ssl.crt\server.crt
copy "localhost+1-key.pem"  C:\xampp\apache\conf\ssl.key\server.key

现在,在Debian10的Apache2中,激活SSL & vhost_alias

a2enmod vhosts_alias
a2enmod ssl
a2ensite default-ssl
systemctl restart apache2

对于vhost_alias,添加此Apache2配置:

nano /etc/apache2/sites-available/999-vhosts_alias.conf

包含以下内容:

<VirtualHost *:80>
   UseCanonicalName Off
   ServerAlias *.dev.net
   VirtualDocumentRoot "/var/www/html/%0/"
</VirtualHost>

添加站点:

a2ensite 999-vhosts_alias

通过SSH将证书复制到/root/mkcert,并让它覆盖Debian证书:

systemctl stop apache2

mv /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/ssl/certs/ssl-cert-snakeoil.pem.bak
mv /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/ssl-cert-snakeoil.key.bak

cp "localhost+1.pem" /etc/ssl/certs/ssl-cert-snakeoil.pem
cp "localhost+1-key.pem" /etc/ssl/private/ssl-cert-snakeoil.key

chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key
chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key

systemctl start apache2

编辑SSL配置

nano /etc/apache2/sites-enabled/default-ssl.conf

在开始处,使用以下内容编辑文件:

<IfModule mod_ssl.c>
    <VirtualHost *:443>

            UseCanonicalName Off
            ServerAlias *.dev.net
            ServerAdmin webmaster@localhost

            # DocumentRoot /var/www/html/
            VirtualDocumentRoot /var/www/html/%0/

..。

上次重启:

systemctl restart apache2

注意:不要忘记在/var/www/html/中为您的子域创建文件夹

/var/www/html/subdomain1.dev.net
/var/www/html/subdomain2.dev.net
/var/www/html/subdomain3.dev.net
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11621053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档