【问题标题】:How to rewrite rules NginX in this example?在这个例子中如何重写规则 NginX?
【发布时间】:2016-10-31 13:23:10
【问题描述】:

我正在创建一个 API 来提供一些应用程序。

因此应用程序可以调用这些可能的 URL 从数据库中获取信息;

mysite.com/api/v1/get/menus/list_tblname1.json.php
mysite.com/api/v1/get/menus/list_tblname1.json.php?type=arr
mysite.com/api/v1/get/menus/list_tblname2.json.php
mysite.com/api/v1/get/menus/list_tblname2.json.php?type=arr

在 php 中,我已经有了从 URL 中获取 tblname 并将所有表格内容返回给我的代码。它工作得很好(它不是最终版本)。 但现在我发现自己为 URL 指向的每个页面复制和粘贴相同的代码。代码如下:

<?php
header('Content-Type:application/json');
include_once '../../../../class/db.php';
$verb=$_SERVER['REQUEST_METHOD'];

$filePath=$_SERVER['SCRIPT_NAME'];
$split1 = explode("/", $filePath);

preg_match("/(?<=_)[^.]+/", $split1[5], $matches);
$tableName = $matches[0];

if ($verb=="GET") {

        header("HTTP/1.1 200 ok");

        if(isset($_GET['type']) && $_GET['type']=="arr"){
            echo db::get_list($tableName,'arr');//Reply ARRAY  
        }
        else{
            echo db::get_list($tableName);//Reply JSON  
        }
}
else{
        die("Nothing for you at this page!");        
    }

我的意思是,我在这些页面中都有相同的代码。

list_tblname1.json.php
list_tblname2.json.php

我不确定如何解决这种情况,但我认为这是 重写规则。

所以,我认为一个可能的解决方案是创建一个可以调用的页面 例如returncontent.php,并在服务器中创建规则,当请求某些页面时应指向同一页面,并将参数$tableName 传递给页面。我想我应该将正则表达式传递给我的服务器,并在returncontent.php 中使用 $_GET[](我认为)获取$tableName

我不确定。

我正在使用 NginX。

在这种场景下如何实现?

【问题讨论】:

    标签: api nginx url-rewriting


    【解决方案1】:

    通常,在 NginX 中解析 URI 并将结果传递到下游是不好的做法。

    而是:mysite.com/api/v1/get/menus/returncontent.php?file=list_tblname2.json

    不需要对 NginX 进行任何更改。在 PHP 中解析查询参数 (file)。

    【讨论】:

    • 顺便说一句,您可能需要考虑 ORM,例如propelorm.org
    • 你的想法很好很干净。为我节省大量代码!
    • 顺便说一下mysite.com/api/v1/get/menus/returncontent.php?tbl=tblname.type。可以是?tbl=tblname.json?tbl=tblname.arr
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多