如何在 yii2 中获取干净的 url,如 ``post/100``

How to get clean urls in yii2 like ``post/100``

我引用的是指南:

根据 urlManager 配置,创建的 URL 可能类似于以下之一(或其他格式)。而如果后面请求创建的URL,还是会解析回原来的路由和查询参数值

/index.php?r=post/view&id=100  
/index.php/post/100  
/posts/100  

我对第三个选项或没有 index.php 的第二个选项感兴趣。但是我怎样才能得到它呢? 我有 .htaccess 正在删除 index.php(我可能需要 nginx 的一些东西,但不知道是什么以及如何,我从未使用过它)。 我有漂亮的 url 设置:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
],

下一步是什么?

我在 yii2 论坛上问过 the same question,但没有人回答:(

您无需为此目的更改 .htaccessNginx 中的任何内容。

index.php 已使用该设置删除:

'showScriptName' => false,

该行已启用漂亮的网址:

'enablePrettyUrl' => true,

这意味着像 ?r=post/view 这样的 url 不会被生成。

唯一剩下的就是配置rules

如果我们有 PostController 及其操作 viewid 作为主键,没有 index.php 的第二个选项将是:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
         'post/<id:\d+>' => 'post/view',
    ],
],

对于第三个选项,只需在规则的左侧部分添加 s

'posts/<id:\d+>' => 'post/view',

官方文档涵盖了 here

为了删除 /web 前缀,您需要将您的网络服务器指向此子目录而不是项目根目录