将查询字符串删除到Yii URL

时间:2015-02-28 22:15:58

标签: yii2 yii-url-manager

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

的路径
urlManager'=>array(
    'urlFormat'=>'path', 
    .............
)

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

修改

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

7 个答案:

答案 0 :(得分:0)

在main.php中

'components' => [
    ....
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],

答案 1 :(得分:0)

在config.php中

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

答案 2 :(得分: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友好URL。

编辑:如果我理解正确,那么你希望使用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

答案 3 :(得分:0)

我有同样的问题。我的回答是关于正则表达式。如果您的“路线”(例如“控制器/模块”)和“参数”(例如“['id'=&gt; 23,'slug'=&gt;'some-slug']”)与任何人的网址规则都不匹配在您的配置中,所以网址管理员将返回您上面写的链接(“some_route?view = myview&amp; id = 2”)

答案 4 :(得分:0)

当@liding在他的答案中指出参数与你的规则配置不符时,它们将在网址中输出。

我在登录重定向方面遇到类似问题 - 当用户会话消失时,我重定向到登录页面,其具有与用户仪表板页面相同的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 方法。

答案 5 :(得分:0)

您可以使用

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

在没有查询参数的情况下创建指向当前页面的链接,或在单引号中放置所需的任何路径

答案 6 :(得分:0)

要屏蔽查询字符串,您需要向网址管理器添加规则。基于匹配值进行转换。在下面的示例中,该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

每本杂志的DOC正式文件 https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing#url-rules