php - 如何根据域使用动态 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 应用程序中处理多个域/语言路由的最佳方法是什么?不幸的是,我找不到足够的文档...
解决方案
推荐阅读
- php - PDF 和 Roland 打印机特定代码
- arrays - 在perl中将数组从一个引用复制到另一个引用
- docker - docker hub 中的构建参数是什么
- colors - 尝试在swift4 xcode9中使用没有故事板或色轮的RGB颜色
- c++ - 解构 const 指针?
- sql-server - Excel没有从视图中提取所有记录
- c - 快速 C 随机布尔生成器
- python - pyspark.sql.types.Row 列出
- bash - 将整个提交复制到单独的目录中
- amazon-ec2 - /var/log/cloud-init-output.log 在 RHEL 7.5 上不存在