经过一段时间的搜索和尝试后,我得出结论:我的问题对于谷歌来说有点太特殊了:-)
我有 2 个域名和多个子域名
示例网站
- cloud.example.org
- wiki.example.org
- *.example.org(此域名的所有其他域名)应重定向到 example.org,显示“正在建设中”的图像。
示例网站
- 博客.beispiel.de
- 同样:*.beispiel.de 应该重定向到 beispiel.de
我的 Apache 配置中每个子域有 1 个文件,每个子域有 1 个 vHost。我使用“Let's encrypt”进行 https 加密。
问题:
http://blupp.example.com转到 https://blupp.example.com,Firefox 显示连接不安全警告。点击忽略后,它会重定向到主页,但https://blupp.example.com在 URL 中。
->错误它应该转到 example.com
另一个问题是:
example.com 是我的首页。因此,如果 beispiel.de 出现问题,它会重定向到首页:cloud.example.com
->错误我不想混合使用 example.com 和 beispiel.de,只想租用一台服务器:-)
这些是我的文件(我知道顺序很重要:-)
0_redirects.conf 只需发出 http 请求 -> https
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule "/" https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
1_cloud-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@...
ServerName cloud.example.com
ServerAlias cloud.example.com
<Directory /var/www/example.com/cloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
同样wiki.example.com和博客.beispiel.de,每个都有一个递增的前缀数字。
我首先尝试让所有 example.com 页面运行,因此我没有动 beispiel.de。
现在我尝试了很多方法为两个主域创建一个额外的 vHost,将其他所有内容重定向到正确的主域例子或者示例,但失败了。
我尝试重定向
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName null
ServerAlias *.example.com
Redirect permanent / example.com
</VirtualHost>
</IfModule>
并将此配置设置在更高阶的位置(100)。
我不知道该怎么办。有人能帮忙吗?
此致
艾迪
答案1
让每个子域的重定向正常工作的最简单的解决方案是将它们设置在各自的VirtualHost
容器中。
第二件事是不要使用参数化的 mod_rewrite 规则进行重定向,但正如手册所建议的那样避免 mod_rewrite并使用Redirect
指令。
# Correctly redirect plain http requests -> https
<VirtualHost *:80>
ServerName cloud.example.org
Redirect "/" "https://cloud.example.org/"
</VirtualHost>
<VirtualHost *:80>
ServerName wiki.example.org
Redirect "/" "https://wiki.example.org/"
</VirtualHost>
<VirtualHost *:80>
ServerName example.org
ServerAlias *.example.org
Redirect "/" "https://example.org/"
</VirtualHost>
对于 也类似biespiel.de
。
考虑到 Apache HTTPD ServerName 和 ServerAlias 匹配取决于顺序,并且对于与多个 VirtualHosts 匹配的 Host: 标头,将使用 first-match。包含通配符的 ServerAlias 记录没有特殊优先级*
。因此,显式 ServerName cloud.example.org
VirtualHosts 必须在包含通配符的 VirtualHost 块之前排序ServerAlias *.example.org
。