我有这些URL:
https://my.example.com/api/foo
https://my.example.com/api/bar
个https://my.example.com/api/baz
为了对用户 * 简化 * 它,也为了 * 强调 * 不同的含义,我设置了这些子域,它们具有与https://my.example.com/
相同的DocumentRoot
:
https://foo.example.com/
https://bar.example.com/
https://baz.example.com/
由于事实上我不能做的最后一步,这意味着网址仍然是这样的:
https://foo.example.com/api/foo
https://bar.example.com/api/bar
https://baz.example.com/api/baz
个
这并没有真正简化它,因为用户仍然需要将api/<name>
附加到URL。
我的问题:
有没有办法在CakePHP控制器中省略/api/<name>
并 * 以某种方式将其重定向 ,以便输入https://foo.example.com/
就足够了,这将在https://foo.example.com/api/foo
中运行代码?
我可以使用$_SERVER ["SERVERNAME"]
检查当前的子域,所以这不是问题所在。
“让我更难的是”
登录页面通常通过https://foo.example.com/users/login
访问,这意味着当/users/login
是URL的一部分时, 不可见重定向 * 不能被触发。但是,我想我可以通过检查$_SERVER
变量的内容来防止这种情况。
我真的希望你们能明白我的意思。
PS:我不想使用Apache的重定向,因为这会在浏览器中显示最终的URL https://foo.example.com/api/foo
。
运行CakePHP 4.1.4
1条答案
按热度按时间mwkjh3gx1#
我真的看不出这有什么更简单的,如果有什么的话,我会发现它是不那么冗长,这是从来没有好的URL。无论如何,它听起来像你正在寻找主机绑定路由,即
_host
选项。这会将
/
连接到foo.example.com
、bar.example.com
和baz.example.com
,每个连接到不同的控制器,具体取决于主机:/users/login
URL将连接到任何主机,因为它没有被限制,即所有这些URL将工作并指向相同的控制器和操作:foo.example.com/users/login
bar.example.com/users/login
baz.example.com/users/login
这可能会引入更多的问题,比如如果cookie没有覆盖所有子域,或者SEO中的内容重复,那么它们就无法正常工作。所以,请确保您的路径尽可能具体!
还请注意,资源路由将无法正常工作与此,因为它需要一个路径元素,即你不能连接资源只在
/
上,如foo.example.com
,它将不得不foo.example.com/resource-name
,如果你想连接到前者,每个资源路由将需要手动连接。最后,如果没有使用命名路由,那么如果要生成URL,就必须在URL数组中使用
'_host' => 'foo.example.com'
!另请参阅
*操作手册〉路由〉匹配特定主机名