【问题标题】:Yii2 rules in routing section路由部分的 Yii2 规则
【发布时间】:2018-12-05 07:56:54
【问题描述】:

我是 Yii2 的新手,目前我在设置应用程序时收到错误消息。 我尝试使用友好的 URL。

根据DOCS

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        //... rules ...
    ]
]

我在我的应用程序中将此部分设置为:

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        '/' => 'site/index',
        '/entry' => 'site/entry',
        'defaultRoute' => 'main/index'
    ]
]

当我尝试打开 URL http://yii2/entry 时,这工作正常。

如果我设置为:

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        '/' => 'site/index',
        '/entry' => 'site/entry',
        'defaultRoute' => 'main/index'
    ]
]

如果我尝试打开 URL http://yii2/site/entry 我收到错误 404

另外,如果我设置:

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        '/' => 'site/index',
        '<controller>/<action>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        'defaultRoute' => 'main/index'
    ]
]

如果我尝试打开 url http://yii2/site/entry 我也收到错误 404。

为什么会这样?在哪里可以阅读有关 yii2 中路由的更多详细信息?我的错误在哪里?

更新: Apache2.2(赢) .htaccess 包含:

RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# if $showScriptName is false in UrlManager, do not allow accessing URLs with script name
RewriteRule ^index.php/ - [L,R=404]

UPD2: 我收到 404 错误的 2 个变体:尝试使用路由规则时:

当我使用不在规则数组中的 url 时:

【问题讨论】:

  • 您是否为您的服务器设置了重写?它是哪一个,Apache、Nginx 还是别的?
  • 是的,我正在使用 .htaccess 进行重写。
  • 你能把它贴在这里吗?
  • 我更新了主帖。部分 UPD。
  • 只是为了排除明显的问题 - http://yii2/entry 为您提供来自 SiteControlleractionEntry() 方法的结果?你检查过 Apache 日志和 Yii 日志吗?

标签: yii2 yii2-basic-app yii-routing


【解决方案1】:

修改你的重写规则。

移动线

RewriteRule ^index.php/ - [L,R=404]

成为RewriteEngine on之后的第一个。

将“last”标志 ([L]) 添加到:

RewriteRule . index.php [L]

如果没有这个规则,处理会继续下一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多