重写RESTful API中的URL

时间:2019-02-15 00:58:00

标签: php .htaccess mod-rewrite

我必须用PHP创建一个API,这是我以前从未做过的。我在包含表单的根文件夹中有一个index.php。单击按钮将激活AJAX请求以读取所有条目,并且可以填写表格以发送数据。我还将有DELETE和更新。

ajaxcall.js

 // GET to retrieve
 var req;
   req=new XMLHttpRequest();
   req.open("GET", 'src/api/v1/posts',true);
   req.send();

  //post with ajax
    $.ajax({
        type:"POST",
        url: "src/api/v1/posts",
        data: test,
        ContentType:"application/json",

        success:function(){
            alert('successfully posted');
        },
        error:function(){
            alert('Could not be posted');
        }

    });

我在其中有一个文件夹src / api / v1,我想要处理不同请求的终结点文件api.php。现在,我需要将所有AJAX调用重新发送到位于该v1文件夹中的api.php。我创建了一个.htaccess文件,该文件也存储在src / api / v1中。我添加了以下内容:

.htaccess

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule src/api/v1/(.*)$ src/api/v1/api.php?request=$1 [QSA,NC,L]

不幸的是,我没有找到404,它似乎没有将URL重写为api.php,因此它正在查找不存在的/ posts。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

实际上,您应该将.htaccess存储在根目录中,否则Apache将不知道.htaccess下有一个/src/api/v1,因此apache将查找目录src/api/v1/posts并没有找到404错误。

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule src/api/v1/(.*)$ /src/api/v1/api.php?request=$1 [QSA,NC,L]
</IfModule>