Ich arbeite mit Yii2 und ich würde gerne URL-Manager mit Routing verwenden, um alle Nicht-Buchstaben und Nicht-Nummer Zeichen in Schrägstriche zu konvertieren. Ich habe mir viele Fragen angeschaut was schon gefragt wurde (#1, #2, #3, #4) aber keiner hat es gelöst da sie entweder ein wenig ähnliches zeigen aber nicht das was ich will oder nicht für mich überhaupt funktioniert.Yii2 hübsche URL: automatisch alles mit Schrägstrichen konvertieren (einschließlich aller Parameter)
ich einfach urlManager Regeln:
//...
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => array(
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
],
.htaccess (auch einfach):
RewriteEngine on
# 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
In meinem Fall meine hässliche URL ist dies (SiteController -> public function actionTestRouter()
):
localhost/frontend/web/index.php?r=site%2Ftest-router&ident=10&token=ADB&module=P120
Mit Regeln, die ich oben geschrieben habe, bekomme ich besseres Ergebnis (weil es index.php?r=
entfernt und konvertiert %2F
zu /
):
localhost/frontend/web/site/test-router?ident=10&token=ADB&module=P120
Was ich zu bekommen:
localhost/frontend/web/site/test-router/ident/10/token/ADB/module/P120
Meine mehrere Anläufe mit Regeln waren:
'test-route/<ident:\d+>/<token:\w+>/<module:\w+>' => 'test-route' // 1
'<controller:\w+>/<action:\w+>/<ident:\d+>/<token:\w+>/<module:\w+>' => '<controller>/<action>' // 2
'<controller:\w+>/<action:\w+>/<slug:[a-zA-Z0-9_-]+>/' => '<controller>/<action>/<slug>' // 3 (not even sure what slug does here
Es ist auch super nett wäre, wenn die Regeln gelten würden zu irgendwelchen Parametern und Werten, unabhängig von ihrem Namen und Werten.
Danke für die Antwort. Aber ich habe diesen Fehler: 'preg_match(): Kompilierung fehlgeschlagen: Bereich außerhalb der Reihenfolge in der Zeichenklasse bei Offset 66 'beim Versuch der letzten oder vorletzten Optionen. :/ –
Ah seit 5.2 minus sollte auch maskiert werden. Antwort bearbeitet. – user1852788
Ich verstehe es immer noch nicht richtig.:/Ich habe versucht, Ihre Bearbeitung und eingegeben 'localhost/Frontend/Web/Site/Test-Router/Ident/10/Token/ADB/Modul/P120' (direkt in URL), aber ich bekomme' 404' Fehler. –