我无法显示静态页面。尝试按照此处的文档[{3}}(第100页)中所述进行操作,但是当我启用prettyurl时,它无法正常工作。
在urlManager规则中添加:
'urlManager' => array(
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => array(
'' => 'site/index',
'login' => 'site/login',
'contacts' => 'site/contact',
'<view:(break)>'=>'/site/page?&view=<view>',
),
),
然后在SiteController中添加:
public function actions()
{
return [
...
'page' => [
'class'=>'yii\web\ViewAction',
],
];
}
然后创建views / site / pages / break.php
<h1>View static page Break</h1>
但是我收到一个错误: 未找到(#404) 无法解析请求:网站/网页?&amp; view = break
如果我禁用prettyUrl:
//'enablePrettyUrl'=>true
然后我可以看到我的页面输入网址:index.php?r = site / page&amp; view = break
ViewAction出了什么问题?
答案 0 :(得分:2)
我认为你正在做你网址的规则部分管理错误。 试试这个
'urlManager' => [
'class' => 'yii\web\UrlManager',
// Disable index.php
'showScriptName' => false,
// Disable r= routes
'enablePrettyUrl' => true,
'rules' => array(
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
],
规则部分应该很重要..
答案 1 :(得分:2)
我解决了我的问题。使用这样的行:
'<view:(break)>' => 'site/page',
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
我强制使用特定的页面名称进行查看,在我的情况下它“破解”,因为无法使用此
'<view:[a-zA-Z0-9-]+>' => 'site/page',
(它导致崩溃其他规则。)我认为它可以更好地创建扩展UrlRule的“自己的规则类”,但认为现在我不需要它。
答案 2 :(得分:1)
我曾尝试过这种方式(没有规则规范):
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => 'false'
],
答案 3 :(得分:0)
解决方案很简单:
web.php代码与此'rules' => [
'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',
在SiteController中,请不要使用函数actions():
public function actionIndex ($view)
{
return $this->render('/site/pages/' . $view);
} catch (InvalidParamException $e) {
throw new HttpException(404);
}
。
4.感谢samdark及其文章https://github.com/yiisoft/yii2/issues/2932