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

我在一个IP上有两个虚拟主机,www.example.com和www.example2.com。 默认的example.com有一个子域docs.example.com,它工作正常,它也有一个SSL证书,它在example.com上强制使用https。

当我尝试在第二个域(即blog.example2.com(wordpress))上设置子域时,它会redirect到第一个域https://www.example.com 。 www.example2.com虽然工作正常。

一个IP上的两个站点可以有子域名吗? 或者你可以只有默认的子域名? 有没有办法让example2上的子域工作?

configuration文件:

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上拥有多个子域名和顶级域名。 发布的虚拟主机显示configuration正确。

  1. 有没有办法让example2上的子域工作?

我怀疑redirect是由于apache没有看到/加载blog.example2.com虚拟主机文件或Wordpressconfiguration问题:

  • Apache将跳过加载任何无效的虚拟主机文件,并退回到在000-default.conf中定义的域。 如果您使用的是Apache2,则可能需要检查/ etc / apache2 / sites-enabled文件夹以确保已启用并正在加载blog.example2.com.conf。 另外,如果您修改或添加了一个虚拟主机文件,请不要忘记重新启动Apache。

  • 最初设置的Wordpress网站反映了一个“example.com”的域名。 WordPress在wp_posts表格中保存GUID的绝对path,在其数据库的wp_options表格中保存网站的域名(url)和主页url。 您可能需要执行查找和replace来更新数据库中的域。 这可以直接通过SQL查询或使用WP-CLI工具来完成。 这两个方法都在https://wordpress.stackexchange.com/questions/7693/what-sql-query-to-do-a-simple-find-and-replace

  • 有时,开发人员可能会覆盖并设置wp-config.php中的顶级域(站点url)和主页url。 这两个设置将类似于:

    define('WP_HOME',' http://www.example.com '); define('WP_SITEURL',' http://www.example.com ');

  • WordPress网站的.htaccess文件有一个指向www.example.com的redirect规则

最后一个注意事项 – 确保你的虚拟主机的网站/子域允许.htaccess。 应该有一个类似于:

 <Directory "/var/www/blog.example2.com/public_html"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>