首页 > 解决方案 > 如何根据域使用动态 URL / 路由?

问题描述

我有一个电子商务网站,可通过多个域以多种语言提供。例如:example.com(英文)、example.fr(法文)等等...我想要这样的动态 URL:example.com/product/shoes-54, example.com/produit/chaussures-54. 如何根据域声明这些路由,知道 /produit 必须只能在example.fr并且/product只能在 上访问example.com

我试图根据域在开关盒中声明这些路由。

<?php
$domainName = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '';
switch($domainName) {
    case 'example.fr':
    case 'www.example.fr':
        $routes->connect('/ajoutez-votre-experience', ['controller' => 'Home', 'action' => 'add']);
        $routes->connect('/contact', ['controller' => 'Home', 'action' => 'contact']);
        $routes->connect('/conditions-d-annulation', ['controller' => 'Home', 'action' => 'refund']);
        $routes->connect('/hote/:slug', ['controller' => 'Host', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/experience/:slug', ['controller' => 'Experience', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/region/:region', ['controller' => 'Location', 'action' => 'index'])->setPass(['region']);
        $routes->connect('/region/:region/:region_sub', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub']);
        $routes->connect('/region/:region/:region_sub/:city', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub','city']);
        $routes->connect('/recherche', ['controller' => 'Search', 'action' => 'index']);
        break;
    case 'example.com':
    case 'www.example.com':
    case '':
    default:
        $routes->connect('/add-your-business', ['controller' => 'Home', 'action' => 'add']);
        $routes->connect('/contact', ['controller' => 'Home', 'action' => 'contact']);
        $routes->connect('/cancellation-condition', ['controller' => 'Home', 'action' => 'refund']);
        $routes->connect('/host/:slug', ['controller' => 'Host', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/experience/:slug', ['controller' => 'Experience', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/location/:region', ['controller' => 'Location', 'action' => 'index'])->setPass(['region']);
        $routes->connect('/location/:region/:region_sub', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub']);
        $routes->connect('/location/:region/:region_sub/:city', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub','city']);
        $routes->connect('/search', ['controller' => 'Search', 'action' => 'index']);
        break;
}

它工作正常,除非我需要在我的 CRON 任务中获取产品的特定 URL。由于我不在特定域中,因此我无法“猜测” URL 和路由。

我考虑过命名我的路线,但我的意思是我需要声明所有主题才能在我的 CRON 任务中获得它,这不适合我,因为我不希望在example.fr/product/shoes-54.

在 CakePHP 应用程序中处理多个域/语言路由的最佳方法是什么?不幸的是,我找不到足够的文档...

标签: phpcakephproutescakephp-3.0

解决方案


推荐阅读