我已經找到了我自己的問題的答案。該.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";
?>