路由部分中的Yii2规则

时间:2018-12-05 07:56:54

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

我是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'
    ]
]

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

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

UPD: 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: 我收到2个404错误的变体:尝试使用路由规则时:

enter image description here 当我使用URL不在规则数组中时: enter image description here

1 个答案:

答案 0 :(得分:0)

修改您的重写规则。

移动行

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parsedURL = parse_url($actual_link);
parse_str($parsedURL['forums'], $parts);
echo $query['forums'];

成为RewriteRule ^index.php/ - [L,R=404] 之后的第一个。

将“最后”标志(RewriteEngine on)添加到:

[L]

没有此规则的处理将继续进行下一个。