url-rewriting - rewrite用法 - nginx转发重定向



Yii基本的url重写 (1)

我是新来的php,新的mvc,新的yii,和新的URL重写。 所以,我很抱歉,如果我问一些非常基本的东西。

我已经隐藏了index.php(从yii论坛讨论的htaccess方法)

在我的urlmanager中,我有这个,

'urlFormat'=>'path',
             'rules'=>array( 
             '<controller:\w+>/<id:\d+>'=>'view',
             '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
             '<controller:\w+>/<action:\w+>'=>'<controller>/<action>' 
              ),
             'showScriptName'=>false,

我有3个文件在视图/网站文件夹。

  1. '旅程',
  2. '邀请',
  3. 'LinkedIn'

现在,我的主页应该重定向到“旅程”行动(即应该打开“site / journey.php”)

所以,我想,这将是

'/' => 'site/journey'

它也可以。

现在,我想“旅程/邀请”应该调用“邀请”的行动,即应该打开“site / invite.php”

而“旅程/ linkedin”应该调用“linkedin”操作,即“site / linkedin.php”。

但,

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin'

不管用。

另外,有人可以帮助我理解这一点,

<controller:\w+>/<id:\d+>

即什么是在url中的控制器和“W +”是什么意思?

对指南的参考也将有所帮助。

在bool.dev的建议之后编辑:

正如你所说的那样改变了代码(我之前也试过,删除了所有的默认规则)。 现在我的网址管理员就像

    '/' => 'site/journey',
    'journey/invite' => 'site/invite',
    'journey/linkedin' => 'site/linkedin',
    '<controller:\w+>/<id:\d+>'=>'view',
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

但是它会抛出一个错误

“警告:require_once():有效的open_basedir限制文件(/var/xyz.com /../ yii / framework / yii.php)不在允许的路径中:(/ usr / share / php: / usr / share / pear:/ usr / share / php / libzend-framework-php:/ var / * /tmp:/var/xyz.com)在/var/xyz.com/journey.php在线12警告: require_once(/var/xyz.com/../ yii / framework / yii.php):无法打开流:在12行/var/xyz.com/journey.php中不允许操作致命错误:require_once():无法打开需要'/var/xyz.com/../yii/framework/yii.php'(include_path ='。:/ usr / share / php:/ usr / share / php / libzend-framework-php') 12号线/var/xyz.com/journey.php

当我做xyz.com/journey/invite甚至xyz.com/journey

编辑:

这是一个权限问题,@ bool.dev的建议把具体规则放在最上面:)


Answer #1

这两个:

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin'

没有工作,因为该URL是由以前的规则匹配:

'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'

为了防止这种情况发生,只要确保规则是最后提到的,在任何特定的(即不是正则表达式匹配的)重写之前,所以你的规则可以看起来像这样:

'journey/invite' => 'site/invite',
'journey/linkedin' => 'site/linkedin',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'

这个: \w+表示匹配任何有一个或多个“word”字符的字符串(az 0-9 _), \d+表示匹配任何有一个或多个任意数字(0-9)的字符串。 检查出正则表达式

编辑

如果以前没有彻底地读过你的问题,那么规则中的controller就是匹配表达式的名字,所以你可以使用'<contr:\w+>/<act:\w+>'=>'<contr>/<act>'

EDIT2

在用规则数组读取你编辑的问题后, afaik可以使用''=>'site/journey'而不是'/'=>'site/journey'





url-routing