首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以对所有vhost执行通配符HTTP->HTTPS重定向?

是否可以对所有vhost执行通配符HTTP->HTTPS重定向?
EN

Server Fault用户
提问于 2019-03-04 12:03:01
回答 2查看 342关注 0票数 0

在我们的dev服务器上,我们有多个站点供多个开发人员通过Apache2.4.6中的vhost运行。我们在CentOS 7上。

我们希望将所有http://www.site.ext.dev-username.commondomain.ext重定向到https://www.site.ext.dev-username.commondomain.ext。在这里,dev-usernamesite.ext可以根据开发站点和用户的不同进行更改。

我们以前使用过这样的方法:

代码语言:javascript
复制
    ServerName www.site.ext.dev-username.commondomain.ext
    Redirect permanent / https://www.site.ext.dev-username.commondomain.ext/

但是,是否有可能匹配任何(或至少是通配符) ServerName并相应地重定向,即使用对正则表达式的反向引用?也许是用DirectoryMatch或者别的什么来代替vhost?

我在文档(目录和位置匹配)中注意到了这一点,遗憾的是,这与我的Apache版本不兼容:

从2.4.8开始,捕获命名组和反向引用并将其写入到环境中,并以"MATCH_“作为前缀并以大写字母开头。这允许从表达式和模块(如mod_rewrite )中引用URL元素。为了防止混淆,将忽略编号(未命名)反向引用。使用命名组代替。

EN

回答 2

Server Fault用户

发布于 2019-03-04 14:03:04

仅在2.4.8中启用了反向引用(而且我在早期版本中),我想出了一种替代解决方案,它不是纯apache,而是为我工作的,可能会帮助其他人。

我添加了一个新的vhost配置,如下所示:

代码语言:javascript
复制
  ServerName 000_default_http.commondomain.ext
  ServerAdmin technical@commondomain.ext

  DirectoryIndex index.html index.php
  DocumentRoot /var/www/html/000_default_http/
  
    AllowOverride All
    Require all granted
  

  CustomLog "|/usr/sbin/rotatelogs -l /var/log/httpd/000_default_http%Y%m%d_web.log 86400" combined env=!image
  CustomLog "|/usr/sbin/rotatelogs -l /var/log/httpd/000_default_http%Y%m%d_image.log 86400" combined env=image
  ErrorLog "|/usr/sbin/rotatelogs -l /var/log/httpd/000_default_http%Y%m%d_error.log 86400"

在这里,ServerName并不重要。因为我们给它一个000_default_http.conf文件名,所以它将被视为默认的vhost。我们需要做的是确保所有vhost吐露指定:

代码语言:javascript
复制

然后,每当我们访问http://的任何站点时,它都会使用上面的配置。然后,我在index.php中添加了/var/www/html/000_default_http/中的以下内容:

代码语言:javascript
复制

并确保所有目录也被捕获,还添加了一个.htaccess文件:

代码语言:javascript
复制
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

所以现在,任何包含路径和查询字符串的url都将从http重定向到https。

请注意,如果您决定在HTTPS站点旁边有一个显式的HTTP站点(或几个),那没关系。只需确保您的000_default_http.conf在*:80虚拟主机中按字母顺序排在首位。如果Apache在端口80上与这些信任的ServerName匹配,它将使用它们,否则它将继续使用上述vhost并重定向到HTTPS耦合部件。

显然,您可以为您选择的任何语言切换PHP。但是,这种方法允许我不必在所有站点上使用单独的.htaccess指令和/或为开发人员吐露的每个vhost配置文件搞混。

尽管如此,如果有人能想出一种更好的方法,只在apache中完成,我会非常感兴趣的。

票数 1
EN

Server Fault用户

发布于 2019-03-04 15:59:03

我使用以下vhost:

代码语言:javascript
复制
    ServerName 'sub.domain.tld'

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

这会将每个HTTP请求重定向到具有确切路径的HTTPS

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/956634

复制
相关文章

相似问题

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