Laravel 5.5实现301重定向后如何彻底移除旧URL路由?
解决Laravel旧URL彻底移除并处理Google收录的问题
嘿,我来帮你搞定这个问题!你现在的情况是Laravel路由列表里还能看到旧路由,而且想要彻底把旧URL从网站里清除掉,同时还要处理Google已收录的旧链接对吧?咱们一步一步来:
1. 先删掉Laravel里的旧路由定义
你现在还保留着旧路由的代码,所以php artisan route:list肯定会显示它。直接把这段代码从routes/web.php(或者你定义路由的文件)里删掉:
// 删掉这行! Route::get('{var1}_{var2}_details', function($var1, $var2){ return redirect()->route('details',[$var1, $var2]); });
删掉之后再跑php artisan route:list,旧路由就彻底消失了。
但这里有个问题:直接删掉的话,Google爬虫或者用户访问旧URL会得到404错误,这对SEO不好。所以咱们得用服务器层面的301永久重定向来处理,这比Laravel路由重定向更高效,还不会在路由列表里留痕迹。
2. 在服务器配置里加301重定向
根据你用的服务器(Nginx或Apache),选择对应的配置:
如果你用的是Nginx
打开你的站点配置文件(一般在/etc/nginx/sites-available/目录下),在server块里添加这条rewrite规则:
rewrite ^/([^_]+)_([^_]+)_details$ /$1-$2-details permanent;
- 这个正则会匹配所有
xxx_xxx_details格式的旧URL,自动转成xxx-xxx-details的新URL permanent表示301永久重定向,会告诉Google这个URL已经永久迁移到新地址,帮助它更快更新索引
添加后重启Nginx生效:
sudo systemctl restart nginx
如果你用的是Apache
打开项目根目录的.htaccess文件,确保已经启用了mod_rewrite(一般默认是开的),然后在Laravel自带的rewrite规则之前添加:
RewriteRule ^([^_]+)_([^_]+)_details$ /$1-$2-details [R=301,L]
R=301指定永久重定向,L表示这是最后一条规则,防止后续规则干扰- 记得保存文件,Apache会自动加载新配置(如果没生效可以重启Apache)
3. 验证重定向是否正常工作
用curl命令测试一下旧URL:
curl -I https://your-domain.com/test_var_details
如果返回的状态码是301 Moved Permanently,并且Location头指向对应的新URL,那就说明配置成功了。
4. 后续处理Google收录
- 提交新URL到Google Search Console,或者上传更新后的站点地图,加快Google抓取新URL的速度
- 等1-2周(或者更久,看Google的抓取频率),检查Google搜索结果里旧URL是否已经被替换成新的
- 当确认旧URL完全从Google索引中消失后,你可以选择保留服务器上的重定向规则(防止还有遗漏的旧链接),或者删掉它也没关系
这样操作下来,不仅Laravel路由列表里不会有旧路由,网站也不会展示任何旧URL,同时还能妥善处理Google的收录问题~
内容的提问来源于stack exchange,提问作者Afraz Ahmad
相关产品推荐
相关产品推荐

