You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 编码斜杠(Encoded Forward Slashes)路由参数配置无效问题求助

解决Laravel 8中URL参数含编码斜杠(%2F)的404问题

我之前也踩过一模一样的坑!其实核心问题不是Laravel路由配置错了,而是Web服务器会提前把URL里的%2F解码成实际的斜杠,导致Laravel收到的请求路径变成了/testslash/test/test,自然匹配不上你定义的/testslash/{param}路由了。

下面分两种常见服务器环境给你解决方案:

Apache环境

修改项目根目录下public/.htaccess文件:

  1. 在RewriteRule规则之前添加一行条件,限定只对目标路由生效(避免影响其他路由):
RewriteCond %{REQUEST_URI} ^/testslash/.*
  1. 修改原有的RewriteRule,加上B标记(这个标记会让Apache保留URL的编码状态,不提前解码%2F):
RewriteRule ^ index.php [L,B]

修改后的.htaccess相关部分示例:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 新增:限定仅对/testslash路由生效
    RewriteCond %{REQUEST_URI} ^/testslash/.*
    # 带B标记的规则,保留URL编码状态
    RewriteRule ^ index.php [L,B]
</IfModule>

Nginx环境

修改你的Nginx站点配置文件:
在location ~ \.php$块中,添加fastcgi_param REQUEST_URI $request_uri;,确保传递给PHP的是原始编码的请求路径:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    # 其他fastcgi配置(比如PHP-FPM地址)...
    fastcgi_param REQUEST_URI $request_uri; # 关键:传递未解码的原始URI
    fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; # 根据你的PHP版本调整
    fastcgi_index index.php;
    include fastcgi_params;
}

最后验证

修改完配置后重启Web服务器,再访问/testslash/test%2Ftest,这时候Laravel就能正确解析param参数为test/test(Laravel会自动解码参数值),不会再返回404了。

另外你原来的路由约束->where('param', '.*')是完全正确的,不需要调整~

内容的提问来源于stack exchange,提问作者drakanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:32:31