yii2 urlManager enablePrettyUrl 不适用于 IndexController

yii2 urlManager enablePrettyUrl not work with IndexController

我的配置:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '<alias:login|logout>' => 'site/<alias>',
    ],
]

我的.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

我的控制器:my controllers

我测试了 example.com/home/test、example.com/login 和 example.com/index.php/index/test 工作,但是 example.com/index/test 404,我必须使用示例。com/index.php/index/test .

任何建议将不胜感激。

在您的 htaccess 文件中,第一个重写条件为:

"if the file is not directly found then..."

IndexController

上请求操作时,此条件将失败并且不会应用重写规则

第二个读作:"if the directory is not directly found then..."

第一个条件失败,因为您将其中一个控制器命名为 IndexController,它 index.php.

的名称冲突

当您请求对 HomeController 执行操作时,服务器首先尝试查找 home.htmlhome.php 文件,由于找不到,它使用重写规则你得到了预期的结果,你的控制器上的动作 运行s。

但是,当您尝试 运行 index/test 时,服务器首先尝试查找 index.htmlindex.php,文件已找到,因此重写规则不会得到应用。然后服务器尝试提供 index/test 文件但找不到它并且 returns 404.

你可以重新排列你的控制器,现在你有三个 home 控制器,SiteControllerHomeControllerIndexController,你真的需要他们三个吗?

否则可能能够以某种方式更改您的重写规则以使其工作,但我不确定具体该怎么做,我认为这将类似于使第一个重写条件更多严格以确保只有匹配确切的文件路径才能停止重写。

如果您确实修改了 .htaccess,请确保之后您的静态资源仍能得到正确的服务。