2013-11-26 4 views
0

Я пытаюсь удалить /site/ и /user/ с моего url на Yii. Я и пытался добавить этот кодyii удаление подпапок из строки url

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

но я до сих пор не могу заставить его работать. Я пытаюсь получить все мои статические страницы, чтобы выглядеть mydomain.com/about.html

здесь некоторые из URL, я хочу изменить

/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

Похоже, что некоторое правило остается перед вашими правилами для main и user. Третий '<controller:\w+>/<action:\w+>'=>'<controller>/<action>' всегда соответствует любому маршруту и ​​сохраняет идентификаторы контроллера и действия по URL. Поскольку применяется первое согласованное правило, все следующие правила не имеют смысла.

Вы должны переместить свои правила в начало rules массив CUrlManager. Предположив main и user являются идентификаторами ваших контроллеров они могут выглядеть следующим образом:

'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. В результате все другие правила, которые соответствуют этим URL-адресам, никогда не будут применяться, что неприемлемо для вас.

Смежные вопросы