2016-07-23 7 views
0

Ich benutze Yii2 Advanced und Nginx. Mein urlManager:Yii2 freundliche URLs funktioniert nicht

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

mydomain.com/page/view?id=1 - es funktioniert

mydomain.com/test1 - funktioniert nicht. 404 Fehler

Es funktionierte in Yii1, aber nicht in Yii2. Was ist los mit dir? Danke.

Antwort

1

Sie können ein Array mit Standardparametern in der Eigenschaft defaults festlegen.

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

Danke! Es ist Arbeit. –

0

Verwenden von regulären Ausdrücken für die Parameter in einem Regeln:

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

Auch Yii2 docs über Routing und URL Creationhttp://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#routing

+0

Nein, meine Frage ist, wie kann ich mydomain.com/test anstelle mydomain.com/page/view?id=1 Ich brauche keine ID in URL –

+0

In diesem Fall viel besser, einen einzigen zu schaffen Seite für jede test1 und test2 URLs und dann können Sie es wie "test1" => "page/test1", "test2" => "page/test2" beschreiben. Was Ihren Pfad _page/view? Id = 1_ mit **? Id = 1 ** anbelangt, wird davon ausgegangen, dass ** id ** in Ihren Regeln vorhanden sein muss. Deshalb empfahlen wir Ihnen, regexp zu verwenden. – smokehill

0

In Ihrem urlManager Config lesen, sollten Sie nur Controller und die Aktion definieren.

So Ihre rules wird:

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

Sie können per Link @baseUrl/test1?id=1 und @baseUrl/test2?id=2, laufen oder diese urlHelper Ihrer Ansicht verwenden:

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

Wenn Sie test1 zeigen Seite anzeigen möchten mit id=1, test2 wird mit id=2 angezeigt, sollten Sie die Regel so konfigurieren:

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

Ich hoffe, das ist nützlich.

Goodluck und viel Spaß.

+0

Ich brauche keine ID in URL. Es sollte so sein: 'domain.com/download' -' domain.com/page/view? Id = 1' oder 'domain.com/test' -' domain.com/page/view? Id = 2' etc –