代码之家  ›  专栏  ›  技术社区  ›  mtpultz

Nginx rewrite等效于Apache RewriteRule,它将URL参数转换为QueryString键/值对

  •  2
  • mtpultz  · 技术社区  · 6 年前

    我正在执行从Apache服务器到Nginx的迁移,但错过了 .htaccess 执行重写的文件:

    RewriteRule ^(.*)$ routes.php?params=$1 [NC,QSA]
    

    例如,此端点 example.com/api/v1/param1/param2/param3 将重写为 https://example.com/api/v1/routes.php?params=/param1/param2/param3

    在我重新尝试迁移之前,是否有人可以确认这是Nginx的正确等效项?

    rewrite "(?i)^(.*)$" routes.php?params=$1
    

    这就是它在配置文件中使用的方式 /api/v1 是唯一需要重写的路径吗?

    location /api/v1 {
      rewrite "(?i)^(.*)$" routes.php?params=$1
    } 
    

    更新

    将其添加到Laravel Forge中的conf文件似乎会破坏应用程序并阻止显示任何视图。相反,它说 This site can’t be reached example.com refused to connect.

    1 回复  |  直到 6 年前
        1
  •  1
  •   Richard Smith    6 年前

    全部的 nginx URI以前导开头 / ,并且正则表达式不会尝试删除 /api/v1/ 追加参数列表之前的前缀。

    尝试:

    location /api/v1 {
        rewrite ^/api/v1(/.*)$ /api/v1/routes.php?params=$1 last;
    }