2012-09-03 72 views
0

這裏是我的設置:Yii索引清除 - 我錯過了什麼?

的config.php

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

的.htaccess

Options +FollowSymlinks 
#+FollowSymLinks must be enabled for any rules to work, this is a security 
#requirement of the rewrite engine. Normally it's enabled in the root and we 
#shouldn't have to add it, but it doesn't hurt to do so. 

RewriteEngine on 
#Apache scans all incoming URL requests, checks for matches in our 
#.htaccess file 
#and rewrites those matching URLs to whatever we specify. 

#allow blank referrers. 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.com [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.dev [NC] 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?dev.site.com [NC] 
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L] 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 


# otherwise forward it to index.php 
RewriteRule . index.php 

在佈局菜單我有這樣的:

$this->widget('zii.widgets.CMenu', 
    array('items'=> 
     array(
      array(
       'label'=>Yii::t('site','A'), 
       'url'=>array('/site/index') 
      ), 
      array(
       'label'=>Yii::t('site','Q'), 
       'url'=>array('rooms/index') 
      ), 
      array(
       'label'=>Yii::t('site','G'), 
       'url'=>array('gastronomy/index') 
      ), 
      array(
       'label'=>Yii::t('site','A'), 
       'url'=>array('activity/index') 
      ), 
      array(
       'label'=>Yii::t('site','S'), 
       'url'=>array('services/index') 
      ), 
      array(
       'label'=>Yii::t('site','C'), 
       'url'=>array('contacts/index') 
      ), 
      array(
       'label'=>Yii::t('site','R'), 
       'url'=>array('booking/index') 
      ) 
     ) 
    ) 
); 

我顯式調用索引在這裏,因爲它似乎,明確地調用它是必需的。

採用這種設置,每次我點擊這些鏈接我得到的,例如:

http://site.dev/rooms/index

雖然我希望得到:

http://site.dev/rooms/

W /列的索引名稱。

我在這裏錯過了什麼?

回答

3

索引條目文件和默認操作之間存在差異。你在搞這些事情。 如果您製作'showScriptName'=>true,您會看到,您的鏈接將更改爲/index.php/rooms/index,其中index.php是索引條目文件。

正如您在選項'showScriptName'=>false中看到的那樣,您的鏈接中沒有index.php,這意味着您已成功從鏈接中刪除條目腳本。

現在您的room/indexcontroller/action URL路由的一部分。 room是控制器,index是行動。 要查看http://site.dev/rooms/而不是http://site.dev/rooms/index,你必須編輯一樣,您的網址路徑:

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

通知我增加了線條'<controller:\w+>'=>'<controller>/index'。這使默認行動index創建controller路線而不是controller/index

+0

非常感謝您花時間解釋這一點。然而,沒有運氣。我們真的需要新增加的線嗎? Yii定義的索引默認情況下是否有默認的控制器? - 我的意思是,我已經添加了該行,但我仍然可以像以前一樣在URL上看到索引。 :( – MEM

+0

@MEM與我展示的順序相同?順序在規則中很重要。控制器中的默認操作適用於調用,但不適用於URL生成。如果在其他地方沒有任何奇怪的地方,則URL規則配置應該工作100% – Johnatan

+0

我已經複製粘貼你的代碼提供 – MEM