Apache规范重写与乘客(mod_rails)

我有一个通过Passenger(mod_rails)服务的应用程序,我想要一个规范的URL。

我想要所有的请求去http://mydomain.com (所以,重写http://www.mydomain.com到http://mydomain.com )。

在我的其他非Rails应用程序中,我使用mod_rewrite和.htaccess文件完成了以下操作:

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(.+)mydomain\.com$ [NC] RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L] 

但是,这似乎并不适用于Passenger。 我已经尝试了各种组合的.htaccess文件(在公共目录中),并移动指令(在虚拟主机configuration),但我不能得到这个工作。

我怎样才能做到这一点?

尝试用下面的代码replace最后一行:

RewriteRule ^(。*) http://mydomain.com% {REQUEST_URI} [R =永久,QSA,L]

如果仍然失败,我build议使用一个单独的虚拟主机的urlwww.mydomain.com只是一个重写mydomain.com。 乘客与mod_rewrite玩得不好。

希望这可以帮助。

更新:显然我正在运行一个老版本的乘客(不知道我是如何错过了)。 我目前正在运行Passenger 2.2.9并将原来的重写放在虚拟主机中,如预期的那样工作(和期望的)!

Google小组讨论旧版Passenger的解决方法: http : //groups.google.com/group/phusion-passenger/browse_thread/thread/5e019e5d65beb54f

对于旧版本:

主办www作为一个单独的虚拟主机和redirect(乔纳森克拉克的build议)

 RedirectMatch 301 ^(.*)$ http://mydomain.com$1 

在应用程序中重写:

 # before_filter :trim_www def trim_www if request.subdomains.first == "www" if request.subdomains == ["www"] redirect_to "#{request.protocol}#{request. domain}#{request.port_string}#{request.path}" else subdomains = request.subdomains.shift.join(".") subdomains << "." unless subdomains.blank? redirect_to "#{request.protocol}#{subdomains}#{request.domain}#{request.port_string}#{r equest.path}" end end end 

(在这个代码的原始post中的道具RSL)