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

Laravel $request->input()线上环境路径与查询参数名合并问题如何解决?

问题根因
  • 该问题是线上Web服务器(Nginx/Apache)的重写/重定向规则配置错误导致的,和二级域名本身无关。本地开发用的Laravel内置serve、集成环境默认带了正确的重写规则,所以不会出现异常。
  • 出现参数名和路径拼接的核心原因是:Web服务器没有正确拆分请求路径和查询字符串,把/items/getAll?cid整个当成了参数键,后面的33当成了参数值传给了Laravel的Request对象。
修复步骤

1. 修正Nginx配置(最常见场景)

检查站点配置的location段,确保try_files规则和官方要求一致,正确携带查询参数:

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

如果配置了HTTP强制跳转HTTPS,确保跳转规则保留查询参数:

# 错误写法(会丢失/拼错参数)
# rewrite ^/(.*)$ https://subdomain.domain.com/$1 permanent;
# 正确写法
rewrite ^/(.*)$ https://subdomain.domain.com/$1$is_args$args permanent;

修改配置后重启Nginx生效。

2. 修正Apache配置

检查站点根目录下public文件夹中的.htaccess文件,确保RewriteRule携带QSA标记(Query String Append,追加查询字符串),官方默认配置参考:

<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}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L,QSA]
</IfModule>

修改后重启Apache生效。

3. 临时兜底方案(不需要改服务器配置)

如果暂时没法修改服务器配置,可以在控制器中手动解析请求URI获取参数:

// 解析完整请求URI
$uri = $_SERVER['REQUEST_URI'];
$queryStr = parse_url($uri, PHP_URL_QUERY);
parse_str($queryStr, $queryParams);
$chosen_category = $queryParams['cid'] ?? 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:00