Ruby-on-Rails

example.com 和 www.example.com 指向兩個不同的應用程序

  • August 10, 2011

問題很簡單,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

這裡有兩件大事要檢查:

  1. 兩個域是否解析到相同的 IP 地址:

嘗試從您host example.comhost www.example.com命令行查看不同的請求是否被路由到同一台伺服器。

如果不是,您需要更新 DNS 以使您的域保持一致 2. 阿帕奇是否感到困惑?對於任何給定的請求,Apache 將使用其配置中的第一個虛擬主機,該主機具有匹配的ServerNameor ServerAlias。檢查您沒有衝突的虛擬主機配置

以“我對紅寶石一無所知”作為我的答案的開頭。

您已經說過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​​ 處理虛擬主機的方式有一些魔力,那麼我的回答是沒用的 :)

引用自:https://serverfault.com/questions/295049