![example.com 和 www.example.com 指向两个不同的应用程序](https://linux22.com/image/556664/example.com%20%E5%92%8C%20www.example.com%20%E6%8C%87%E5%90%91%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
问题很简单,http://example.com和http://www.example.com不是同一个网站。问题肯定出在我的 VHost 配置上:
乘客最小实例数 5 乘客池空闲时间 0
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/someuser/www/example.com/public_html/public
<Directory /home/someuser/www/example.com/public_html/public>
AllowOverride all
Options -MultiViews
</Directory>
ErrorLog /home/someuser/www/example.com/logs/error.log
CustomLog /home/someuser/www/example.com/logs/access.log combined
RailsBaseURI /
PassengerSpawnMethod smart
</VirtualHost>
我还删除了所有不会导致启动错误的模块,这些是正在加载的模块:
# ls mods-enabled
alias.conf alias.load authz_default.load authz_groupfile.load authz_host.load authz_user.load
答案1
这里有两件大事需要检查:
两个域名是否解析为同一个 IP 地址:
尝试
host example.com
从命令行host www.example.com
查看不同的请求是否被路由到同一台服务器。如果不是,你需要更新 DNS 以确保你的域名一致
Apache 是否感到困惑?对于任何给定的请求,Apache 将使用第一的虚拟主机在其配置中具有匹配的
ServerName
或ServerAlias
。检查您没有冲突的 vhost 配置
答案2
在我的回答前面加上“我对 ruby 一无所知”。
您已声明,http://example.com and http://www.example.com aren't the same sites
但您的 vhost 配置表明它们是。
ServerName example.com
ServerAlias www.example.com
这些指令表示此虚拟主机将负责这两个名称。因此,听起来您只需要使用自己的ServerName
指令将 www.example.com 拆分到自己的虚拟主机中即可。
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
DocumentRoot /home/someuser/www/example.com/public_html/public
....other stuff....
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.example.com
DocumentRoot /home/someuser/www/www.example.com/public_html/public
....other stuff....
</VirtualHost>
如果 ruby 处理 vhost 的方式存在一些魔法,那么我的答案就没用了:)
答案3
这个虚拟主机配置解决了我的问题:
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
DocumentRoot /home/someuser/www/example.com/public_html/public
<Directory /home/someuser/www/example.com/public_html/public>
Options FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
ErrorLog /home/someuser/www/example.com/logs/error.log
CustomLog /home/someuser/www/example.com/logs/access.log combined
RewriteEngine On
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
</VirtualHost>