Virtualhost
一個 IP Apache2 上的多個域和子域
我在一個 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>
要回答您的直接問題:
- 是否可以在一個 IP 上擁有兩個站點的子域?或者你只能有預設的子域?
是的,您可以在一個 IP 上擁有多個子域和頂級域。如發布的那樣,您的虛擬主機似乎配置正確。
- 有沒有辦法讓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>