我的配置:
'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。
任何建议都将不胜感激。
答案 0 :(得分:0)
在htaccess
文件中,第一个重写条件为:
&#34;如果没有直接找到文件,那么......&#34;
此条件将失败,并且在IndexController
第二个读取:&#34;如果没有直接找到目录,那么......&#34;
第一个条件失败,因为您将某个控制器命名为IndexController
,与index.php
的名称冲突。
当您在HomeController
上请求操作时,服务器首先尝试查找home.html
或home.php
文件,因为它无法找到它,它会使用重写规则并且您获得预期结果,控制器上的操作将运行。
但是,当您尝试运行index/test
服务器首先尝试查找index.html
或index.php
时,会找到该文件,因此不会应用重写规则。然后服务器尝试提供index/test
文件,但无法找到它并返回404。
您可以重新排列控制器,现在您有三个主页控制器,SiteController
,HomeController
和IndexController
,您真的需要它们中的三个吗? ?
否则可能会以某种方式更改您的重写规则以使其工作,但我不确定如何做到这一点,我认为这将是使第一次重写条件更多的线条严格确保只匹配确切的文件路径停止重写。
如果您确实修改了.htaccess
,请确保之后仍然正确地提供了静态资源。