2016-07-23 44 views
0

我使用的是Yii2 advanced和Nginx。我urlmanager:Yii2友好的網址無效

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'test1' => 'page/view?id=1', 
     'test2' => 'page/view?id=2', 
    ], 
], 

mydomain.com/page/view?id=1 - 它的工作原理

mydomain.com/test1 - 不起作用。 404錯誤

它在Yii1中工作,但在Yii2中不起作用。怎麼了? 謝謝。

回答

1

您可以在默認屬性中設置默認參數數組。

'rules' => [ 
    [ 
     'pattern' => 'test1', 
     'route' => 'page/view', 
     'defaults' => ['id' => 1], 
    ], 
], 
+0

謝謝!是工作。 –

0

使用正則表達式的規則參數:

'rules' => [ 
    'test/<id:\d+>' => 'page/view', 
], 

也瞭解路由Yii2文件和URL創建http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#routing

+0

沒有,我的問題是如何使用mydomain.com/test代替mydomain.com/page/view?id=1我不需要ID在URL –

+0

在這種情況下,最好創建一個單一的頁面爲每個test1和test2網址,然後你可以描述它像''test1'=>'page/test1','test2'=>'page/test2'。至於你的路徑_page/view?id = 1_ with **?id = 1 **,它假定** id **必須出現在你的規則中,這就是爲什麼我們建議你使用regexp。 – smokehill

0

在你urlManager配置,你應該只定義控制器和動作。

所以你rules將是:

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     'test1' => 'page/view', 
     'test2' => 'page/view', 
    ], 
], 

您可以通過鏈接@baseUrl/test1?id=1@baseUrl/test2?id=2運行,或使用本urlHelper在您的視圖:如果你想與test1顯示頁面視圖

Html::a('test1', \yii\helpers\Url::to(['test1', 'id' => 1])) 

id=1,test2將顯示爲id=2,您應該這樣配置規則:

'rules' => [ 
    //other rules ... 
    [ 
     'pattern' => 'test<id:\d+>', 
     'route' => 'page/view', 
    ], 
    //other rules ... 
], 

希望這個有用。

Goodluck,玩得開心。

+0

我不需要網址中的ID。它應該是這樣的:'domain.com/download' - 'domain.com/page/view?id = 1'或'domain.com/test' - 'domain.com/page/view?id = 2' etc 。 –