【问题标题】:Nginx rewrite equivalent to Apache RewriteRule that converts URL params into QueryString key/value pairNginx 重写等效于 Apache RewriteRule,将 URL 参数转换为 QueryString 键/值对
【发布时间】:2018-03-15 10:51:33
【问题描述】:

我正在执行从 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.

【问题讨论】:

    标签: php apache nginx laravel-forge


    【解决方案1】:

    所有nginx URI 都以/ 开头,并且您的正则表达式在附加参数列表之前不会尝试删除/api/v1/ 前缀。

    试试:

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

    【讨论】:

    • 这实际上是一个错字。它应该是/api/v1,这就是 routes.php 所在的位置。使用/api/v1 需要进行哪些更改?我从来都不擅长正则表达式
    • 如果routes.php 位于子文件夹api/v1/ 中,您问题中的URL 应该是https://example.com/api/v1/routes.php?params=/param1/param2/param3 - 对吗?
    • 是的,路线会有那个确切的查询字符串。抱歉,我试图让问题中的示例尽可能简单,但后来不小心将它与实际应用程序中的样子混在一起了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多