Virtualhost

一個 IP Apache2 上的多個域和子域

  • November 4, 2017

我在一個 IP 上有兩個虛擬主機,www.example.com 和 www.example2.com。預設的 example.com 有一個子域 docs.example.com 可以正常工作,它還有一個 SSL 證書,它在 example.com 上強制使用 https。

當我嘗試在第二個域上設置子域時,即 blog.example2.com (wordpress),它會重定向回第一個域https://www.example.com。www.example2.com 工作正常。

是否可以在一個 IP 上擁有兩個站點的子域?或者你只能有預設的子域?有沒有辦法讓example2上的子域工作?

配置文件:

000-default.conf

<VirtualHost *:80>
   ServerName www.example.com
   ServerAlias example.com
   ...
   DocumentRoot /var/www/example.com/public_html
</VirtualHost>

example.com.conf

<VirtualHost *:80>
   ServerName www.example.com
   ServerAlias example.com
   ...
   DocumentRoot /var/www/example.com/public_html
</VirtualHost>
<IfModule mod_ssl.c>
   ... certificates set up etc.
</IfModule>

docs.example.com.conf

<VirtualHost *:80>
   ServerName docs.example.com
   ...
   DocumentRoot /var/www/docs.example.com/public_html
</VirtualHost>

example2.com.conf

<VirtualHost *:80>
   ServerName www.example2.com
   ServerAlias example2.com
   ...
   DocumentRoot /var/www/example2.com/public_html
</VirtualHost>

blog.example2.com.conf

<VirtualHost *:80>
   ServerName blog.example2.com <-- redirects back to https://www.example.com
   ...
   DocumentRoot /var/www/blog.example2.com/public_html
</VirtualHost>

要回答您的直接問題:

  1. 是否可以在一個 IP 上擁有兩個站點的子域?或者你只能有預設的子域?

是的,您可以在一個 IP 上擁有多個子域和頂級域。如發布的那樣,您的虛擬主機似乎配置正確。

  1. 有沒有辦法讓example2上的子域工作?

我懷疑重定向發生是因為 apache 沒有看到/載入 blog.example2.com vhost 文件或 Wordpress 配置問題:

  • Apache 將跳過載入任何無效的 vhost 文件,並回退到 000-default.conf 中定義的域。如果您使用的是 Apache2,您可能需要檢查 /etc/apache2/sites-enabled 文件夾以確保 blog.example2.com.conf 已啟用並正在載入。此外,如果您修改或添加了 vhost 文件,請不要忘記重新啟動 Apache。
  • 最初設置的 Wordpress 站點反映了“example.com”域。Wordpress 將其 GUID 的絕對 URL 保存在 wp_posts 表中,並將站點的域 (url) 和首頁 URL 保存在其數據庫的 wp_options 表中。您可能需要進行查找和替換以更新數據庫中的域。這可以通過 SQL 查詢或使用 WP-CLI 工具直接完成。這兩種方法都在https://wordpress.stackexchange.com/questions/7693/what-sql-query-to-do-a-simple-find-and-replace的答案中
  • 有時,開發人員可能會覆蓋並設置 wp-config.php 中的頂級域(站點 url)和首頁 url。這兩個設置類似於:

定義(‘WP_HOME’,’ http://www.example.com ‘);定義(‘WP_SITEURL’,’ http://www.example.com ‘);

  • Wordpress 站點的 .htaccess 文件有一個指向 www.example.com 的重定向規則

最後一點 - 確保您的 Wordpress 站點/子域的虛擬主機允許 .htaccess。應該有一個類似於以下的塊:

<Directory "/var/www/blog.example2.com/public_html">
   Options FollowSymLinks
   AllowOverride All

   Order allow,deny
   Allow from all
</Directory>

引用自:https://serverfault.com/questions/881772