Ruby-on-Rails
example.com 和 www.example.com 指向兩個不同的應用程序
問題很簡單,http ://example.com和http://www.example.com不是同一個站點。問題肯定出在我的 VHost 配置中:
乘客MinInstances 5 乘客池空閒時間 0
<VirtualHost *:80> ServerAdmin webmster@example.com 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
這裡有兩件大事要檢查:
- 兩個域是否解析到相同的 IP 地址:
嘗試從您
host example.com
的host www.example.com
命令行查看不同的請求是否被路由到同一台伺服器。如果不是,您需要更新 DNS 以使您的域保持一致 2. 阿帕奇是否感到困惑?對於任何給定的請求,Apache 將使用其配置中的第一個虛擬主機,該主機具有匹配的
ServerName
orServerAlias
。檢查您沒有衝突的虛擬主機配置
以“我對紅寶石一無所知”作為我的答案的開頭。
您已經說過
http://example.com and http://www.example.com aren't the same sites
,但您的虛擬主機配置說它們是。ServerName example.com ServerAlias www.example.com
這些指令是說這個虛擬主機將回答這兩個名字。因此,聽起來您只需使用自己的
ServerName
指令將 www.example.com 分解為自己的虛擬主機。<VirtualHost *:80> ServerAdmin webmster@example.com ServerName example.com DocumentRoot /home/someuser/www/example.com/public_html/public ....other stuff.... </VirtualHost> <VirtualHost *:80> ServerAdmin webmster@example.com ServerName www.example.com DocumentRoot /home/someuser/www/www.example.com/public_html/public ....other stuff.... </VirtualHost>
如果 ruby 處理虛擬主機的方式有一些魔力,那麼我的回答是沒用的 :)