Tôi đang làm việc với Yii2 và tôi muốn sử dụng urlManager với định tuyến để chuyển đổi tất cả ký tự không phải chữ và số không thành dấu gạch chéo. Tôi đã xem xét rất nhiều câu hỏi đã được yêu cầu (#1, #2, #3, #4) nhưng không giải quyết được vì chúng hiển thị một chút tương tự nhưng không phải những gì tôi muốn hoặc không làm việc cho tôi chút nào.Yii2 URL đẹp: tự động chuyển đổi mọi thứ với dấu gạch chéo (bao gồm tất cả các tham số)
tôi có quy tắc urlManager đơn giản:
//...
'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 (cũng đơn giản):
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
Trong trường hợp của tôi, URL xấu xí của tôi là thế này (SiteController -> public function actionTestRouter()
):
localhost/frontend/web/index.php?r=site%2Ftest-router&ident=10&token=ADB&module=P120
Với các quy tắc tôi đã viết ở trên, tôi nhận được kết quả tốt hơn (vì nó xóa index.php?r=
và chuyển đổi %2F
để /
):
localhost/frontend/web/site/test-router?ident=10&token=ADB&module=P120
Những gì tôi muốn nhận được:
localhost/frontend/web/site/test-router/ident/10/token/ADB/module/P120
nhiều attemps của tôi với quy tắc là:
'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
Nó cũng sẽ là siêu đẹp nếu sẽ áp dụng các quy tắc với bất kỳ thông số và giá trị nào, bất kể tên và giá trị của chúng.
Cảm ơn câu trả lời. Nhưng tôi nhận được lỗi này: 'preg_match(): Biên dịch thất bại: phạm vi thứ tự trong lớp nhân vật ở mức bù 66' khi thử tùy chọn cuối cùng hoặc thứ hai cuối cùng. :/ –
Ah từ 5.2 trừ đi cũng nên được thoát. Đã chỉnh sửa câu trả lời. – user1852788
Tôi vẫn không hiểu đúng.:/Tôi đã thử chỉnh sửa của bạn và nhập 'localhost/frontend/web/site/kiểm tra-router/ident/10/token/ADB/module/P120' (trực tiếp vào URL) nhưng tôi nhận được lỗi' 404'. –