Yii2动态后缀URL规则配置:如何接收带扩展名的URL参数
解决Yii2中带扩展名的URL参数接收问题
你遇到的404问题,核心原因是当前URL规则里的filename正则限制太严格了——\w+只能匹配字母、数字和下划线,没法匹配文件名里的.以及后面的扩展名部分。下面给你几种可行的解决方案:
方案1:允许文件名包含任意合法字符(推荐)
把filename的正则改成[^/]+,这个规则会匹配除了斜杠之外的所有字符,能覆盖几乎所有合法的文件名(包括带多个点的情况,比如abc.def.pdf)。修改后的URL规则如下:
'<directory:\w+>/<filename:[^/]+>' => 'file/index'
方案2:明确允许文件名包含点和常见字符
如果你想更精准地限定字符范围,可以用[a-zA-Z0-9_\.]+,它允许字母、数字、下划线和点:
'<directory:\w+>/<filename:[a-zA-Z0-9_\.]+>' => 'file/index'
方案3:只允许特定扩展名的文件
如果你的业务只需要处理特定类型的文件(比如pdf、doc、txt),可以把正则写成只匹配这些后缀的形式:
'<directory:\w+>/<filename:\w+\.(pdf|doc|txt)>' => 'file/index'
配置位置
把上面的规则替换到你项目config/web.php文件中urlManager组件的rules数组里即可,比如:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ // 替换成上面的规则 '<directory:\w+>/<filename:[^/]+>' => 'file/index', // 其他规则... ], ],
修改完成后,访问localhost/uploads/abc.pdf时,你的actionIndex方法就能正确接收到$directory = 'uploads'和$filename = 'abc.pdf'了。
内容的提问来源于stack exchange,提问作者Hammad
相关产品推荐
相关产品推荐

