Apache vHosts - 可以使用两个域、多个子域和默认值吗?

Apache vHosts - 可以使用两个域、多个子域和默认值吗?

经过一段时间的搜索和尝试后,我得出结论:我的问题对于谷歌来说有点太特殊了:-)

我有 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.orgVirtualHosts 必须在包含通配符的 VirtualHost 块之前排序ServerAlias *.example.org

相关内容