【问题标题】:Routing by hostname in CakePHPCakePHP 中的主机名路由
【发布时间】:2011-03-16 07:04:33
【问题描述】:

是否可以在 cakephp 中做特定领域的路由?

例如,假设我有 2 个域:manufacturer.comproductname.com

productname.com 停在manufacturer.com

我想创建这样的路线:

Router::connect('http://www.productname.com/', array('controller' => 'products', 'action' => 'view', 'productSlug'));

因此,manufacturer.com 的索引基本上是默认的 pages/index,但对于 productname.com,它应该是 products/view/productSlug

Cake 可以做到吗?

【问题讨论】:

    标签: cakephp dns routes


    【解决方案1】:

    我只是用我想出的解决方案来回答我自己的问题。

    与其尝试检查路由中的域,更好的方法是在定义路由之前检查主机名。例如:

    if($_SERVER['HTTP_HOST']=='productname.com')
       Router::connect('/', array('controller' => 'products', 'action' => 'view', 'productSlug'));
    else
       Router::connect('/', array('controller' => 'pages', 'action' => 'index'));
    

    有什么意见吗?是好是坏?我还没有测试过,但至少我没有发现任何问题:)

    【讨论】:

    • 我认为这应该可行,很好地解决了您自己的问题!我唯一关心的是代码库中主机名的硬编码。如果你做了类似的事情,但在 AppController 中,你可以从数据库中检索主机/路由数据,这将更容易维护和放入管理界面。
    • 谢谢。如果它是一个更大的站点,我可能也会担心硬编码的主机名,但在这种情况下,它真的无关紧要。我想进一步了解您建议的方法。如果不是太麻烦,您能否分享一些示例代码?
    • 致发现此内容的人:确保将其放入Config/routes.php,否则将无法正常工作。
    【解决方案2】:

    这是可能的,但我可能不会使用路由来做到这一点。主要是因为我不是他们的巫师;)。

    对于您想要的那种灵活性,我认为您可以将所有请求路由到一个集中式控制器(实际上可能是您的 AppController)。然后让该控制器确定调用不同控制器和操作的逻辑。

    【讨论】:

    • 抱歉回复晚了,一直很忙:) 不错的主意。我会记住这一点,尽管我自己也想出了一些别的东西(感谢你的回答):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多