虚拟主机重定向至默认主机

虚拟主机重定向至默认主机

我正在运行 Debian 和 Apache。

我希望在我的开发服务器上创建一个新的开发环境。我们将其称为 dev2。当前开发服务器仅托管开发。我的生产服务器托管实时站点,可通过 访问*.example.com。按照以下步骤设置dev2.example.com自己的文档根目录后,dev2 的 URL 将转发到dev.example.com,即开发服务器上的默认站点。

以下是我采取的步骤:

  • 在我们的托管账户中,我们有一个 A 记录用于www指向生产服务器的 IP。另一个 A 记录用于指向dev.example.com开发服务器,该 URL 会加载默认的开发网站。我创建了一个新的 A 记录,dev2也指向开发服务器的 IP 地址。
  • 我执行了 ping 操作dev2.example.com以确保它能正常工作并且没有数据包丢失。
  • 我创建了一个新的文档根目录和一个虚拟索引:/var/www/html/dev2/docroot/index.html
  • 接下来,我dev2.conf在 中创建了一个文件/etc/apache2/sites-available,并从 中创建了到它的符号链接/etc/apache2/sites-enabled
  • 然后我运行命令sudo a2ensite dev2.conf并通过 重新加载 apache service apache2 reload。最后,我清除了浏览器的缓存,当这不起作用时,我重新启动了 apache2。

我遗漏了什么?以下是文件的内容dev2.conf

<VirtualHost xxx.xxx.xxx.xxx:80>
        ServerAdmin [email protected]
        ServerSignature email
        ServerName dev2.example.com
        DirectoryIndex  index.php index.html index.htm index.shtml
        DocumentRoot /var/www/html/dev2/docroot
        HostNameLookups off
        RewriteEngine on

        # Force SSL
        RewriteCond %{HTTP_HOST} ^dev2\.example\.com$ [NC]
        RewriteRule ^(.*)$ https://dev2.example.com$1 [L,R=301]
        RewriteCond %{HTTPS} !=on
        RewriteRule ^(.*)$ https://dev2.example.com$1 [L,R=301]

        # Force our domain name
        RewriteCond %{HTTP_HOST}   !^dev2\.example\.com [NC]
        RewriteCond %{HTTP_HOST}   !^$
        RewriteRule ^/(.*)         https://dev2.example.com/$1 [L,R]

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/html/dev2/docroot>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted

                # For friendly URLs
                RewriteEngine on
                RewriteBase /
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

编辑:我也尝试在 ServerName 下添加行,ServerAlias dev2.example.com但没有成功。

答案1

根据您询问的实际域(现在已编辑,由 表示example.com),您当前的配置有点混乱:

wget http://开发.example.com
--2017-03-14 22:20:03-- http://dev.example.com/
正在解析 dev.example.com... 206.123.xxx.182
正在连接到 dev.example.com|206.123.xxx.182|:80... 已连接。HTTP
请求已发送,正在等待响应...301 永久移动
地址:https://开发2.example.com/ [关注]

由于某种原因, 上的纯 http 站点dev重定向到 https 站点dev2。大多数 Web 浏览器都会缓存永久重定向(301 响应),因此在测试您应用的每个配置更改时请务必小心。使用命令行工具进行测试,或对每个测试使用新的私人浏览器窗口...

wget http://开发2.example.com
URL 转换为 HTTPS由于 HSTS 政策
--2017-03-14 22:24:45-- https://dev2.example.com/
正在解析 dev2.example.com... 206.123.xxx.182 正在连接到 dev2.example.com|206.123.xxx.182|:4​​43... 已连接。HTTP
请求已发送,正在等待响应...302 已找到
地址:https://开发.example.com/ [关注]

dev2网站所做的事情与 不同dev;应用 HSTS 策略重定向到 HTTPS,然后dev发生重定向(在本例中为临时 302 重定向)。

总结来说:dev正在重定向至dev2 并且dev2正在重定向至dev

您不仅需要检查配置,dev2还需要检查端口 80 上的普通 http 虚拟主机的配置dev以及端口 443 上的 SSL 虚拟主机配置。

相关内容