我拥有的rails应用程序允许用户管理度假屋。每个房产都有自己的房产 我的应用程序中的“网站/主页”和用户可以调整内容,它运作良好, 到目前为止很高兴。典型的rails接近资源,因此特定属性的URL对于特定属性的“主页”看起来像这样。
localhost:3000/properties/1/
然后
localhost:3000/properties/1/full_details
localhost:3000/properties/1/price_list
等
要求是映射域名,例如www.chalet-yeti.com并将其解析(重写?)到localhost:3000 / properties / 1 /
同样也是......
www.chalet-yeti.com/full_details -> localhost:3000/properties/1/full_details
下一位用户添加了一个属性,我代表他们注册了一个新名称,我当然希望这样做..
www.apartment-marie.com -> localhost:3000/properties/2/
这可能/可行/可行在同一个rails应用程序中吗?到目前为止,解决方案的范围从“你为什么这样做”到“使用mod_proxy / mod_rewrite / virtual_host config”的变体。如果重要的话,应用程序在我的服务器上的apache和乘客下运行。
我不想抢先回答,但到目前为止大多数人似乎都指向apache配置,大多数人说我正在尝试的并非不可能/不可取。真的希望有人能够至少指出我正确的方向,因为我整个上午都在摸不着头脑。出于我的舒适区域,我希望我可以启动我的应用程序,并且没有花费六周时间建造一头白象!除非我能做这个URL的事情,否则它已经死了!
答案 0 :(得分:1)
http://37signals.com/svn/posts/1512-how-to-do-basecamp-style-subdomains-in-rails
这就是你想要的。不要乱用apache。它不会扩展到数百个域,并且容易破损。
答案 1 :(得分:-1)
在Rails中,你应该想到只有URI的请求,没有主机名部分。也就是说,您需要考虑localhost:3000/properties/1/full_details
,而不是/properties/1/full_details
。 localhost:3000
部分只是为了在开发过程中向Mongrel提出请求。
所以你真正想要的是接收HTTPd(Apache,在你的情况下)收到的请求,并提取一些信息来构造给Rails的请求。
mod_rewrite
,这是一个Apache模块,是实现这一目标的理智方式。
您需要确保运行Rails应用程序的同一虚拟主机接受您正在使用的所有域名的请求。
然后你可以使用mod_rewrite
做这样的事情:
RewriteCond %{HTTP_HOST} ^(www.)?chalet-yeti\.com$
RewriteRule ^(.*)$ /properties/1/$1 [L]
这会将每个请求发送到主机chalet-yeti.com(或www.chalet-yeti.com)并将其作为“/ properties / 1 / $ 1”传递给Rails(其中$ 1是任何其他路径,如full_details
)。
对于每个域,您都需要一个这样的块,但这只是Apache配置中的两行。除非你做了数百个域名,否则它应该是可以容忍的,对吗?