首页 > 解决方案 > 在 RESTful API 中重写 URL

问题描述

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

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。我究竟做错了什么?

标签: php.htaccessmod-rewrite

解决方案


其实你应该把 存放.htaccess在根目录下,否则 Apache 不会知道有一个.htaccessunder /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>


推荐阅读