php - 在 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。我究竟做错了什么?
解决方案
其实你应该把 存放.htaccess
在根目录下,否则 Apache 不会知道有一个.htaccess
under /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>
推荐阅读
- python - 如何安装 conda python 包
- java - 查找 Java 类中使用的所有方法
- php - 日期输入类型的奇怪输出格式
- java - ping 数千个 url 的 Java 程序
- winapi - Pywin32:无法将 win32api.SendMessage 发送到 DOS 框程序?
- python - Pandas read_sql() 不返回全部值,减小大小
- node.js - 符号链接始终指向其父目录
- html - 将动态类名添加到 React 中的硬编码类列表中
- python - 当鼠标在小部件上时如何显示突出显示的标签
- ios - 将 RealityKit 框架导入项目会使旧设备崩溃