我在一个 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-默认.conf
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
...
DocumentRoot /var/www/example.com/public_html
</VirtualHost>
例如.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>
博客.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 上可以有多个子域和顶级域。如发布的那样,您的虚拟主机配置正确。
- 有什么方法可以让 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>