2

在 Yii1.x 中,我们所要做的就是添加类似的路径'

urlManager'=>array(
    'urlFormat'=>'path', 
    .............
)

但是在 Yii2 中它消失了。如何在没有查询字符串的情况下制作我的网址,例如 http://example.com/forum/post/id/2014/make-yii2-work

编辑

由于许多答案误解了我的问题,让我澄清一下。我没有问题启用 prettyUrl 也没有从 URL 隐藏 index.php。我的问题是我不能像上面问的那样创建没有查询字符串的 URL

4

7 回答 7

0

在 main.php

'components' => [
    ....
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],
于 2015-03-01T08:06:30.420 回答
0

在 config.php

'urlManager' => [ 
 'enablePrettyUrl' => true, 
 'showScriptName' => false, 
],
于 2015-03-01T08:49:29.283 回答
0

config.php添加组件

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

.htaccess网页目录中的文件

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

还可以在此处找到详细说明:http: //fellowtuts.com/yii/creating-seo-friendly-url-in-yii-2-0-framework/并且不要忘记检查最后的相关文章链接以获得 SEO友好的网址。

编辑:如果我理解正确,那么您希望使用 BaseUrl 助手。你可以这样写:

use yii\helpers\Url;

$path = 'forum/post/id/2014/make-yii2-work';
$url = Url::toRoute([$path]);

<!-- HTML -->
<a href="<?= $url; ?>">Make Yii 2 Work</a>

您可以在哪里$path从数据库中获取变量值。

资源:

http://www.yiiframework.com/doc-2.0/yii-helpers-baseurl.html#toRoute()-detail http://www.yiiframework.com/doc-2.0/guide-helper-url.html

于 2015-03-02T16:34:54.077 回答
0

我也有同样的问题。我的答案在于正则表达式。如果您的“路线”(例如“控制器/模块”)和“参数”(例如“['id' => 23, 'slug' => 'some-slug']”)与您的任何人的 url 规则不匹配配置,这样 url 管理器就会返回你上面写的链接 ("some_route?view=myview&id=2")

于 2015-06-02T12:32:31.607 回答
0

您可以使用

\yii\helpers\Url::to([''])

创建不带查询参数的当前页面链接或将所需的任何路径放在单引号中

于 2019-09-26T07:41:02.720 回答
0

要屏蔽查询字符串,您需要向url 管理器添加规则。根据匹配值进行转换。在以下示例中,id 被屏蔽,但您仍然可以使用更多参数创建更复杂的表达式:

[
    'components' => [
        //...
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            // RULES
            'rules' => [
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ],
        ]
        //...
    ]
];

例如post/update?id=1将被转换为post/update/1

Per maggiori dettagli 咨询 l'api DOC ufficiale https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing#url-rules

于 2019-09-26T08:22:13.537 回答
0

正如@liding 在他的回答中指出的那样,当参数与您的规则配置不匹配时,它们将在 url 中输出。

我在登录重定向方面遇到了类似的问题 - 当用户会话消失时,我重定向到登录页面,该页面与用户仪表板页面具有相同的 url 格式,例如 mysite.com/user 和 mysite.com/user/peter,这将结果类似于“mysite.com/user/?slug=”。

因此,要从查询字符串中删除“?slug”,在登录控制器中我使用:

$request = Yii::$app->request;
if ($request->get('slug')) {
    $queryParams = $request->getQueryParams();
    unset($queryParams['slug']);
    $request->setQueryParams($queryParams);
    $this->redirect(['site/login']);
} 

如果要删除所有查询参数,您可能只需将空数组传递给setQueryParams方法。

于 2015-09-28T06:26:48.930 回答