yii2 urlManager enablePrettyUrl不能与IndexController一起使用

时间:2018-01-18 08:34:29

标签: yii2 yii-url-manager

我的配置:

'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 work,但是example.com/index/test 404,我必须使用example.com/ index.php / index / test。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

&#34;如果没有直接找到文件,那么......&#34;

此条件将失败,并且在IndexController

上请求操作时,重写规则将无法应用

第二个读取:&#34;如果没有直接找到目录,那么......&#34;

第一个条件失败,因为您将某个控制器命名为IndexControllerindex.php 的名称冲突。

当您在HomeController上请求操作时,服务器首先尝试查找home.htmlhome.php文件,因为它无法找到它,它会使用重写规则并且您获得预期结果,控制器上的操作将运行。

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

您可以重新排列控制器,现在您有三个主页控制器,SiteControllerHomeControllerIndexController,您真的需要它们中的三个吗? ?

否则可能会以某种方式更改您的重写规则以使其工作,但我不确定如何做到这一点,我认为这将是使第一次重写条件更多的线条严格确保只匹配确切的文件路径停止重写。

如果您确实修改了.htaccess,请确保之后仍然正确地提供了静态资源。