我在一个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>
回答您的直接问题:
是的,您可以在一个IP上拥有多个子域名和顶级域名。 发布的虚拟主机显示configuration正确。
我怀疑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>