我有一个网址https://www.openhub.net,这是我的rails 4.2.7应用。我在另一个系统https://code.openhub.net/上有一个单独的子域。如果你碰上第二个链接,这将重新路由到已停止的页面。托管code.openhub.net
网址的内容将被取消,并将重新发送到openhub.net
。所以我要做的是,当有人试图转到code.openhub.net
我的rails应用程序openhub.net
将提供静态页面。问题是我无法概念化它是如何工作的。例如,以下是路由下的rails文档片段。
3.9基于请求的约束 您还可以基于Request对象上返回String的任何方法来约束路由。
您指定基于请求的约束的方式与指定a的方式相同 段约束:
get 'photos', to: 'photos#index', constraints: { subdomain: 'admin' }
You can also specify constraints in a block form:
namespace :admin do
constraints subdomain: 'admin' do
resources :photos
end
end
通过调用Request对象上的方法来请求约束 与哈希键同名,然后比较返回值 使用哈希值。因此,约束值应该匹配 对应的Request对象方法返回类型。例如: 约束:{subdomain:'api'}将匹配api子域名 预期,但使用符号约束:{subdomain :: api}将 不,因为request.subdomain将'api'作为String返回。
我理解文档的内容,但当我尝试将此代码付诸实践时,我感到很难过。这是我的routing.rb
文件:
get '???', to: '???', constraints: { subdomain: 'code' }
我了解网址的子域约束部分是代码,get
和to
会是什么?我怎么知道会得到什么?我是否只需替换将get code.openhub.net
路由的CodeController#index
?以前有人试过这样的事吗?从文档中我看到请求对象有一个我可以调用的original_url
方法。有没有办法可以利用这个?任何帮助将不胜感激。
答案 0 :(得分:0)
这应该有效:
function firstlast($var,$seperator) {
$varr = explode($seperator, $var);
$first = current($varr);
$last = end($varr);
return $first.'_'.$last;
}
$seperator='_';
$old = 'marine_camp_se_bell';
$new = firstlast($old, $seperator);
echo $new;
这会将get '/', to: 'code#index', constraints: { subdomain: 'code' }
的请求转发到https://code.openhub.net/
中的index
方法。
但是,该网址仍会显示CodeController
。如果您不想这样,您可以尝试重定向,如下所示:
https://code.openhub.net/