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

Laravel框架如何从URL路径中移除id参数

解决步骤

方案一:通过Laravel路由实现(推荐,无需修改服务器配置)

  1. 首先修改路由文件,新增无ID的目标路由,同时保留旧路由做301永久重定向,避免旧链接失效:
// 新的无ID目标路由
Route::get('/p/{any}','TestController@dynamic_page')->name('dynamic.page');

// 旧带ID路由做301重定向
Route::get('/p/{id}/{any}', function ($id, $any) {
    return redirect()->route('dynamic.page', ['any' => $any], 301);
});
  1. 调整控制器查询逻辑,因为现在URL不再传递ID,需要用any参数(也就是页面唯一标识slug)查询数据:
    把控制器dynamic_page方法中原来用ID查询的代码,从类似$page = Page::find($id)改为$page = Page::where('slug', $any)->firstOrFail(),需提前在对应数据表中新增slug字段存储web-test这类唯一标识。

方案二:通过.htaccess重写实现

  1. 删除你之前添加的错误重写规则,替换为以下规则,需放在Laravel默认的入口重写规则之前:
RewriteEngine On
# 匹配/p/数字/任意字符的旧URL,301重定向到不带ID的新URL
RewriteRule ^p/[0-9]+/(.*)$ /p/$1 [L,R=301]

# 保留Laravel默认的入口重写规则不要修改
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
  1. 修改路由定义,和方案一一致,改为无ID的路由规则:
    Route::get('/p/{any}','TestController@dynamic_page')->name('dynamic.page');
  2. 调整控制器查询逻辑,和方案一一致。

注意:修改.htaccess后需要清空浏览器缓存,301永久重定向会被浏览器默认缓存,未清缓存可能看不到生效效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:30:04