在Yii1.x中我们所要做的就是添加类似'
的路径urlManager'=>array(
'urlFormat'=>'path',
.............
)
但是在Yii2中它消失了。如何在没有查询字符串的情况下创建我的URL
http://example.com/forum/post/id/2014/make-yii2-work
修改
由于许多答案误解了我的问题,请让我澄清一下。我没有启用prettyUrl的问题,也没有从URL隐藏index.php。我的问题是我根本不能像上面提到的那样使用没有查询字符串的URL
答案 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