yii从url字符串中删除子文件夹

时间:2013-11-26 06:33:37

标签: yii

我正在尝试从Yii上的网址中删除 / site / / user / 。我尝试添加此代码

'contact' => array('site/contact', 'caseSensitive'=>false),

但我仍然无法让它发挥作用。我正在尝试让所有静态页面看起来像mydomain.com/about.html

这里有一些我想要改变的网址

/site/page?view=about ==> mydomain.com/about.html
/site/contact.html ==> mydomain.com/contact.html
/user/login.html ==> mydomain.com/login.html

这是希望我到目前为止

 'urlManager'=>array(
                'urlFormat'=>'path',
                'urlSuffix'=>'.html',
                'rules'=>array(
                    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                    '<action:.*>'=>'site/<action>',
                    'user/<controller:\w+>/<action:\w+>'=>'user/<controller>/<action>',
                ),
                'showScriptName' => false,
            ),

这是我的.htaccess

# Turning on the rewrite engine is necessary for the following rules and features
# FollowSymLinks must be enabled for this to work
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
</IfModule>

# Unless an explicit file or directory exists, redirect all request to Yii entry script
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . index.php
</IfModule>

1 个答案:

答案 0 :(得分:1)

似乎在适用mainuser规则之前停留了一些规则。第三个'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'始终匹配任何路由,并在URL中保留控制器和操作的ID。由于应用了第一个匹配的规则,因此以下所有规则都没有意义。

您应该将规则移至rules CUrlManager数组的顶部。假设mainuser是控制器的ID,它们可能如下所示:

'rules' => array(
    '<view:(about)>' => 'site/page'
    '<action:(contact)>' => 'site/<action>',
    '<action:(login)>' => 'user/<action>',
    // the rest rules here
)

如果您不仅希望site/page路线使用about路线,请遵循parameterizing routes technique。例如:

'<view:(about|guestbook|download)>' => 'site/page'

使用'<view:\w+>' => 'site/page'之类的内容也会将/contact.html转换为/site/page?view=contact/login.html转换为/site/page?view=login。因此,永远不会应用与您无法接受的所有其他符合这些网址的规则。