我正在尝试从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>
答案 0 :(得分:1)
似乎在适用main
和user
规则之前停留了一些规则。第三个'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
始终匹配任何路由,并在URL中保留控制器和操作的ID。由于应用了第一个匹配的规则,因此以下所有规则都没有意义。
您应该将规则移至rules
CUrlManager
数组的顶部。假设main
和user
是控制器的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
。因此,永远不会应用与您无法接受的所有其他符合这些网址的规则。