【问题标题】:Yii 2 static pagesYii 2 静态页面
【发布时间】:2015-04-23 01:31:39
【问题描述】:

我无法显示静态页面。尝试按照此处文档中的说明进行操作 - http://stuff.cebe.cc/yii2-guide.pdf(第 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) 无法解析请求:site/page?&view=break

如果我禁用 prettyUrl:

//'enablePrettyUrl'=>true

然后我可以看到我的页面输入网址:index.php?r=site/page&view=break

ViewAction 有什么问题?

【问题讨论】:

    标签: yii2 yii-url-manager viewaction


    【解决方案1】:

    我认为您的 url 管理规则部分是错误的。 试试这个

    '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>',
        ),
        ],
    

    规则部分应该很重要..

    【讨论】:

    • 是的,现在 'site/page?&view=break' 打开页面 break.php,但是如何制作更适合 seo 的 url?就像'site.ru/break'
    【解决方案2】:

    我曾尝试过这种方式(没有规则规范):

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

    【讨论】:

      【解决方案3】:

      我解决了我的问题。使用这样的行:

      '<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 的“自己的规则类”,但认为现在我不需要这个。

      【讨论】:

      • '&lt;view:(break)&gt;' =&gt; 'site/page' 这是要走的路!
      • 请注意,这条规则也应该有效:'&lt;view:[a-zA-Z0-9-]+&gt;' =&gt; 'site/page' 它应该最后声明,否则它会捕获所有其他模式。
      【解决方案4】:

      解决方法很简单:

      1. web.php代码是这样的'rules' => [
        'site/page/<view:[a-zA-Z0-9-]+>' => 'site/index',

      2. 在 SiteController 中不要使用函数 actions(),而是:

      public function actionIndex ($view) { return $this->render('/site/pages/' . $view); } catch (InvalidParamException $e) { throw new HttpException(404); }.

      1. 如果views/site/pages/中存在view contacts.php,则url为yourdomain/basic/web/site/page/contact

      4.感谢 samdark 和文章https://github.com/yiisoft/yii2/issues/2932

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多