我已经找到了我自己的问题的答案。该.htaccess
文件中包含go.php
脚本的目录必须
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)$ [NC]
RewriteRule ^(.*)$ go.php?page=$1;%1 [NC,L]
</IfModule>
这将映射如下。假设go.php
脚本位于example.com/api
目录中。
- 第一个和第二
RewriteCond
语句返回实际存在的API目录中的任何文件或目录 。
- 第3个和第4个
RewriteCond
语句将URL 中的任何查询字符串捕获到名为%1
的变量中。第三条语句处理no查询 字符串大小写。
- 最后一条
RewriteRule
语句将URL中的api目录 下的资源名称捕获到名为$1
的变量中。然后它调用go.php
脚本,并传入新的查询字符串,其中包含 资源名称,后跟;
后跟原始查询字符串。
一些例子
- 如果“junk.html
exists in
/api`它会被退回。
- 如果'sub/junk.html
exists in
/api`将被返回。
- 如果
customer.json
不/api
存在,那么 customer.json?id=123,name=smith
将调用go.php
,并通过它叫做page
与价值customer.json;id=123,name=smith
单个查询字符串变量。
所有这一切背后的想法是在RESTful API中使用它。在上面的第三个示例中,customer
是资源,json
是表示,其余是参数。 go.php
脚本可以使用此数据在资源上执行HTTP动词并返回请求的表示。
我为什么要这样做。通常在数据库应用程序中,资源有很多参数,因此如果我们使用嵌套的/
传递所有这些参数,那么创建和更新资源看起来有点麻烦,这正是我所了解的纯RESTful API所需的参数。
要测试上述Rewrite
这里的代码是一个简单的go.php
脚本。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Go Baby</title>
</head>
<body>
<?php
$page = "NIX";
if(isset($_GET["page"]))
$page = $_GET["page"];
echo "Passed in page $page";
?>