我正在尝试使用Yii2创建一个静态页面。页面名称有两个单词,例如-隐私权政策。我在SiteController.php
public function actionPrivacyPolicy()
{
return $this->render('privacy-policy');
}
然后,我在站点文件夹内创建了一个名为-privacy-policy.php
的页面。
但是,这导致找不到页面错误。
我的网站有很多这样的情况。解决此问题的最佳方法是什么?
答案 0 :(得分:1)
如果使用"enablePrettyUrl"=>true
http://yoursite.com/site/privacy-policy
和
http://yoursite.com/index.php?r=site/privacy-policy
如果不使用"enablePrettyUrl"=>true
此后,您仅需要按操作名称来解析SiteController
中的所有操作,因此您需要转动"enableStrictParsing"=>false
,然后在urlManager
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
"enableStrictParsing" => false,
'rules' => [
"/" => "site/index",
"<action:(.*)>" => 'site/<action>',
],
],
编辑:
尽管这允许/不应允许使用字符,但是,我在规则中使用(.*)
的原因是因为操作名称将在控制器内定义,并且您必须在声明的位置使用规则仅在SiteController
内部执行操作,而该操作不会使用任何不允许的字符来解析规则的任何操作名称,这意味着如果操作名称将为actionMyActionNameLong
,则存在0的可能性/
或\
的生成是带有操作名称的操作名称,在使用规则时会进一步破坏操作,因此可以在此上下文中使用它,否则,如果创建网址,则可以使用[\w\-]+
手动。
答案 1 :(得分:0)
模式<alias:\w+>
与连字符不匹配,因为\w+
仅接受字母,数字和下划线。您需要使用[\w\-]+
来匹配由连字符分隔的单词。
'rules' => [
'<alias:[\w\-]+>' => 'site/<alias>',
// ...
],
答案 2 :(得分:-1)
我认为您可以在config文件夹的main.php中配置UrlManager 并尝试在urlManager上添加一些规则,以便可以动态访问URL
'urlManager' => [
"enablePrettyUrl" => true,
"showScriptName" => false,
"enableStrictParsing" => false,
"suffix" => "",
"rules" => [
"<controller:\w+>/<action:\w+>" => "<controller>/<action>"
],
],
如果在控制器行为上使用\ yii \ filters \ AccessControl,则可能需要在创建新操作之前将允许的操作添加到列表中。