【问题标题】:How to configure rewrite rules for small api using nginx?如何使用nginx配置小api的重写规则?
【发布时间】:2015-03-16 21:38:55
【问题描述】:

我是nginx 的新手,对重写规则有疑问。我正在尝试为一个非常小的 API 配置重写规则,有什么比我想出的更合适的方法吗?

我将在它后面运行 PHP,使用一种 MVC 工作流,其中控制器、方法和参数将从 URI 中获取,但第一个参数将代表 API 密钥。

PHP 概念:

controller->method( arguments )

配置:

location /api/ {
    # passing api key only
    rewrite ^/api/([0-9\-]+)/?$ /api/index.php?apikey=$1 last;
    # passing api key and controller
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/?$ /api/index.php?apikey=$1&controller=$2 last;
    # passing api key, controller and method
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/((select|insert|delete)+)/?$ /api/index.php?apikey=$1&controller=$2&method=$3 last;
    # passing api key, controller, method and arguments
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/((select|insert|delete)+)/([0-9\-]+)/?$ /api/index.php?apikey=$1&controller=$2&method=$3&argument=$4 last;
}

提前致谢,

【问题讨论】:

    标签: php model-view-controller nginx rewrite rules


    【解决方案1】:

    如果你为每个 API 请求定义一个重写规则,你最终会得到一个凌乱、难以阅读的 nginx 配置文件。此外,您仍然需要在 PHP 中定义所有相同的路由。

    因此,在我看来,只进行一次通用重写是有意义的,例如:

    location /api/ {
        # passing api requests
        rewrite ^/api/(.*)/?$ /api/index.php?uri=$1 last;
    }
    

    然后处理 index.php 中的所有逻辑——解析 $_REQUEST['uri'] 并相应地路由。如果您将所有内容都重定向到同一个文件,为什么要执行两次相同的逻辑?

    【讨论】:

    • 谢谢,我会将其移至引导程序。
    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多