Gyt*_*mas 7 php url .htaccess yii yii2
我正在使用Yii2,我想使用带路由的urlManager将所有非字母和非数字字符转换为斜杠.我已经看了很多问题(#1,#2,#3,#4)但是没有解决它,因为它们要么显示有点相似但不是我想要的或根本不为我工作.
我有简单的urlManager规则:
//...
'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>',
),
],
Run Code Online (Sandbox Code Playgroud)
.htaccess(也很简单):
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
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我的丑陋URL是this(SiteController -> public function actionTestRouter()):
本地主机/前端/网络/的index.php?R =站点%2Ftest路由器&IDENT = 10&标记= ADB&模块P120 =
根据我上面写的规则,我得到了更好的结果(因为它删除index.php?r=并转换%2F为/):
本地主机/前端/网络/站点/测试路由器?IDENT = 10&标记= ADB&模块P120 =
我想得到什么:
本地主机/前端/网络/站点/测试路由器/ IDENT/10 /令牌/ ADB /模块/ P120
我对规则的几个尝试是:
'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
Run Code Online (Sandbox Code Playgroud)
如果规则适用于任何参数和值,无论其名称和值如何,这也将是非常好的.
你的第二次尝试
'<controller:[\w\-]+>/<action:[\w\-]+>/<ident:\d+>/<token:\w+>/<module:\w+>' => '<controller>/<action>' // 2
Run Code Online (Sandbox Code Playgroud)
将采取/创建网址
本地主机/前端/网页/网站/测试路由器/ 10/ADB/P120
在url中没有params的名称,这些params将仅按此顺序使用,并且它们的列表是固定的,如您所见
如果你想在url中添加他们的名字(如你问题中的estetic或seo目的):
'<controller:[\w\-]+>/<action:[\w\-]+>/ident/<ident:\d+>/token/<token:\w+>/module/<module:\w+>' => '<controller>/<action>', // 2
Run Code Online (Sandbox Code Playgroud)
这些路线的网址创建将是相同的:
echo Url::to(['site/test-router', 'ident' => 100, 'module' => 100, 'token' => 100]);
Run Code Online (Sandbox Code Playgroud)
如果你想解析这个params列表的各种长度,你可以像这样使用smth:
'<controller:[\w\-]+>/<action:[\w\-]+>/<params:[a-zA-Z0-9_\-\/]+>' => '<controller>/<action>'
Run Code Online (Sandbox Code Playgroud)
或仅为一条路线指定:
'site/test-route/<params:[a-zA-Z0-9_\-\/]+>' => 'site/test-route'
Run Code Online (Sandbox Code Playgroud)
所以在操作中你将得到参数params:Yii::$app->request->get('params');用regexp解析它.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |