首页 > 解决方案 > Yii2:在没有网络服务器帮助的情况下重写 URL

问题描述

我想纯粹使用 Yii2 重写一个 URL,而不依赖于网络服务器(nginx/apache)。

例子。我想“重写”一个网址,例如[POST|PUT|GET] /v2/book/authorinto [POST|PUT|GET] /v2/document/author

我的第一个想法是使用UrlManager$rules,但那些并没有真正重写 URL,它们将 URL 映射到路由中,所以只要第一个匹配,链就会终止。URL 重写需要在 UrlManager 开始处理路由之前进行。

我的第二个想法是创建一个自定义UrlNormalizer,它只是替换传入的 URL。这听起来更好,但我不知道它是否会起作用。

这样做的正确方法是什么?

标签: yii2

解决方案


如果你不指定 URL,Yii 会自动创建 URL。

默认<module>/<controller>/<action>/<param>

如果您有问题,您必须重构整个代码以更改 url,那么是的,UrlManager 就是这样。Url::to() 使用您的 url 配置将您的<controller>/<action>标识符调整为实际的 url。如果您对网址进行硬编码,则必须手动更改网址。

但是你应该能够创建一个匹配的模式来捕捉v2/book/author 我在我的代码中尝试过的,它起作用了:

在此处输入图像描述

所以这也应该有效

在此处输入图像描述


推荐阅读