You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel应用部署到虚拟主机后分页链接异常问题排查

问题根源与解决方案

你的问题核心出在.htaccess里的Rewrite规则写法上,导致框架生成AJAX分页URL时错误地带上了当前页面的路径参数。

具体原因分析

本地环境(比如PHP内置服务器php -S localhost:8000)的路由处理逻辑和Apache的Rewrite规则不同,它不需要依赖.htaccess就能正确解析路径,所以你的AJAX分页链接能正常生成。

但部署到Apache虚拟主机后,你的Rewrite规则是这样的:

RewriteRule ^(.*)$ index.php?/$1 [L]

这个规则会把所有非文件/目录的请求重定向到index.php?/xxx,也就是把请求路径作为查询参数传递给index.php。此时,当你在/exampleroute页面发起AJAX请求时,框架会错误地将当前页面的查询参数(也就是/exampleroute)合并到新的分页URL里,经过URL编码后就变成了%2Fexampleroute=,最终生成异常的链接https://example.com/content/page_comments?%2Fexampleroute=&page=2

修复方案

修改.htaccess里的RewriteRule,把查询参数的写法改为PATH_INFO模式:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # 把原来的 ?/$1 改成 /$1
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

如果你的框架支持更简洁的写法,也可以把RewriteRule简化为:

RewriteRule ^ index.php [L]

这样修改后,Apache会把请求路径作为PATH_INFO传递给index.php,框架就能正确生成AJAX分页URL,不会再附加多余的参数了。

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

火山引擎 最新活动