【问题标题】:Rewrite url from parameter into subdir将url从参数重写到子目录
【发布时间】:2021-04-03 19:58:15
【问题描述】:

作为参数搜索,我希望 url 显示 subdir 而不是这样的参数:

这里的参数网址:search/?genre=a&pref=b&city=c&sticking&=d

这是转换显示后的子目录 url:search/a/b/c/d

如果搜索 url 的参数少于 4 个,则可以将其转换为一些 url,如下所示:

search/a/b/c
search/b/c/d
search/a
search/b
...

有没有办法使用 htaccess 来做到这一点?

我正在使用 Laravel。

感谢您的回答。

【问题讨论】:

  • 你能发布你的路线吗?

标签: laravel .htaccess url


【解决方案1】:

在您的 /route/web.php 或 /route/api.php 文件中,您可以像下面这样定义路由:

Route::get('/search/{a?}/{b?}/{c?}/{d?}', 'SearchController@method');

在 Rian Zaman 建议的控制器中,您必须执行以下操作:

public function method_name($a = null, $b = null, $c = null, $d = null)
{
    // Your code here ...
}

【讨论】:

  • 你忘了把初始大括号放在b?}
  • @AhmadKarimi 谢谢你的建议。由于 url 没有像 search/pref/city/sticking 这样的类型我怎么知道它是 pref/city/sticking?这意味着我需要获取属于哪个数据库以便在数据库中搜索
  • 使用参数会告诉我哪个参数是。搜索/?genre=a&pref=b&city=c&sticking&=d。所以这就是我要使用参数并重写 url 的原因
  • @HaiTien,使用顺序很容易解决。如果任何或许多参数碰巧为空,您可以在查询字符串中放入空,例如:search/book/null/1/null
  • @AhmadKarimi 由于我的客户不喜欢将 null 添加到 url,我们不能使用它。
【解决方案2】:

如果你想实现这一点,如果你知道搜索词的最大数量,我建议使用可选的路由参数。

您可以通过执行以下操作来实现,

在您的路线中:

Route::get('/your-route/{param1?}/{param2?}/{param3?}/{param4?}');

在您的控制器中:

public function function_name($param1 = null, $param2 = null, $param3 = null, $param4 = null){
// your logic
}

请点击链接以供参考:Optional parameters

【讨论】:

  • 非常感谢。让我试试你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2015-08-04
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多