在我们的dev服务器上,我们有多个站点供多个开发人员通过Apache2.4.6中的vhost运行。我们在CentOS 7上。
我们希望将所有http://www.site.ext.dev-username.commondomain.ext重定向到https://www.site.ext.dev-username.commondomain.ext。在这里,dev-username和site.ext可以根据开发站点和用户的不同进行更改。
我们以前使用过这样的方法:
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元素。为了防止混淆,将忽略编号(未命名)反向引用。使用命名组代替。
发布于 2019-03-04 14:03:04
仅在2.4.8中启用了反向引用(而且我在早期版本中),我想出了一种替代解决方案,它不是纯apache,而是为我工作的,可能会帮助其他人。
我添加了一个新的vhost配置,如下所示:
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吐露指定:
然后,每当我们访问http://的任何站点时,它都会使用上面的配置。然后,我在index.php中添加了/var/www/html/000_default_http/中的以下内容:
并确保所有目录也被捕获,还添加了一个.htaccess文件:
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中完成,我会非常感兴趣的。
发布于 2019-03-04 15:59:03
我使用以下vhost:
ServerName 'sub.domain.tld'
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]这会将每个HTTP请求重定向到具有确切路径的HTTPS
https://serverfault.com/questions/956634
复制相似问题