5

在 Yii2 中,我无法启用漂亮的 url。

我的配置:

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
    ],

我的.htaccess:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

我的脚本:

echo 'enablePrettyUrl: ';
echo Yii::$app->urlManager->enablePrettyUrl ? 'true ' : 'false';

echo '<br>';
echo 'enableStrictParsing: ';
echo Yii::$app->urlManager->enableStrictParsing ? 'true ' : 'false';

echo '<br>';
echo 'showScriptName: ';
echo Yii::$app->urlManager->showScriptName ? 'true ' : 'false';

echo Url::to(['/book/read', 't' => 'booktitle', 'c'=>'chaptertitle']);

脚本的输出:

enablePrettyUrl: true
enableStrictParsing: false
showScriptName: false

/book/read?t=booktitle&c=chaptertitle

显然,我没有得到漂亮的 Url。为什么不?

  • 我们知道enablePrettyUrl=== true
  • 我不相信我的 .htaccess 有什么问题
4

2 回答 2

8

你得到了漂亮的网址。这是一个漂亮的网址

/book/read?t=booktitle&c=chaptertitle

丑陋的网址是

index.php?r=book/read&t=booktitle&c=chaptertitle

所以在 yii2 中一切都按预期工作。现在您可能想让它们更漂亮,在这种情况下,您可以在规则部分添加类似

'urlManager' => [
    'class' => 'yii\web\UrlManager',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        'book/read/<t>/<c>' => 'book/read',
    ]

这将生成一个看起来像的链接

book/read/booktitle/chaptertitle

更改它以满足您的需求。无需更改控制器中的任何内容,它仍然会接收 t 和 c 参数。

于 2015-01-08T04:37:17.230 回答
1

你已经得到了漂亮的 URL

/book/read?t=booktitle&c=chaptertitle

是一个漂亮的网址。你也可以这样打

/book/read/t/booktitle/c/chaptertitle

如果你想在浏览器中使用它会导致相同的结果,如果你?对 URL 感到困惑。

于 2015-01-08T05:56:40.430 回答