Laravel分页在GoDaddy生产服务器失效,寻求技术解决办法
修复GoDaddy上Laravel分页与搜索功能失效问题
我之前在GoDaddy部署Laravel时也碰到过完全一样的问题,核心原因就是public_html目录下的.htaccess配置不兼容Laravel的路由机制,尤其是没有正确保留查询参数(分页的page、搜索的关键词参数都会被丢弃),加上原来的规则是给ExpressionEngine用的,完全不适合Laravel。咱们一步步来解决:
1. 修正public_html目录的.htaccess配置
这是最关键的一步,你当前的public_html .htaccess是ExpressionEngine的规则,直接替换成适配Laravel的配置:
情况A:Laravel项目根目录在public_html同级(推荐部署方式)
如果你的Laravel项目放在public_html外面(比如服务器上有/home/your-user/laravel和/home/your-user/public_html两个目录),把public_html的.htaccess改成:
<IfModule mod_rewrite.c> RewriteEngine On # 直接访问域名时指向Laravel的public入口 RewriteRule ^$ laravel/public/index.php [L] # 处理非文件/目录的请求,转发到Laravel入口,并保留查询参数(QSA) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ laravel/public/index.php/$1 [L,QSA] </IfModule>
情况B:Laravel项目直接放在public_html内(不推荐但常见)
如果你的整个Laravel项目都在public_html里,直接把public_html的.htaccess替换成Laravel默认的public目录下的规则:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理Authorization头(避免API/auth相关问题) RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除尾部斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 所有非文件/目录请求转发到index.php,保留查询参数 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L,QSA] </IfModule>
2. 清理Laravel缓存(确保路由/配置生效)
除了清除配置缓存,还要清理路由缓存,因为旧的路由规则可能还在生效:
php artisan config:clear php artisan route:clear php artisan view:clear
3. 验证分页链接逻辑
你用$variable->links()配合paginate(11)的写法是对的,修正.htaccess后,生成的分页链接应该是类似your-domain.com/posts?page=2的格式,Laravel能正确获取到page参数;搜索功能的查询参数(比如?search=keyword)也会被保留,从而正常触发搜索逻辑。
额外检查
- 确认GoDaddy服务器的
mod_rewrite模块已开启:可以通过创建phpinfo.php文件(内容为<?php phpinfo(); ?>)访问,搜索mod_rewrite确认状态。 - 如果Laravel根目录下的.htaccess是多余的(因为web根是public_html),可以直接删除它,避免冲突。
内容的提问来源于stack exchange,提问作者TLG123
相关产品推荐
相关产品推荐

