[英]PHP RESTful routing
我的問題很簡單。 我正在用PHP實現RESTful服務,並且正在使用mod-rewrite將干凈的URL重定向到and index.php。 因此,例如,如果我有這個網址來獲取包含代碼12345的課程。
http://localhost/courses/12345
我將按照以下結構將其重定向到index.php
http://localhost/index.php?manager=CoursesManager&courseCode=12345
在index.php中,我查找CoursesManager.php,如果能夠找到它,則創建一個CourseManager對象,然后處理查詢字符串並調用所需的方法。
但是,例如,如果我想讓我們說一門課程可以擁有的類的類型,我不知道如何重寫url。 假設網址是
http://localhost/courses/12345/typesofclass
我該如何重寫?
謝謝。
嘗試這個
RewriteRule /courses/([0-9]+)/([a-zA-Z]*) /index.php?manager=CoursesManager&courseCode=$1&type=$2 [L]
在您的情況下,最好的方法是創建一個全面的url重寫:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
並在數據庫中創建一個特定的條目:
+----+-----------------------------+
| id | clean_url |
+----+-----------------------------+
| 1 | /courses/12345 |
| 2 | /courses/12345/typesofclass |
+----+-----------------------------+
現在,您只需獲取url,查看db的含義是什么,並加載所需的數據/腳本。
您可以根據需要添加舊的網址:
+----+-----------------------------+--------------------------------------------+
| id | clean_url | old_url |
+----+-----------------------------+--------------------------------------------+
| 1 | /courses/12345 | manager=CoursesManager&courseCode=12345 |
| 2 | /courses/12345/typesofclass | manager=CoursesManager&courseCode=12345&.. |
+----+-----------------------------+--------------------------------------------+
現在,如果您仍然需要了解舊的參數,則只需在index.php
文件的頂部添加一個小腳本,如下所示:
SELECT old_url FROM ... WHERE clean_url = '{$your_url}'
$params = explode( '&', $result_of_query );
foreach ( $params as $value )
{
$gets = explode( '=', $value );
$_GET[$gets[0]] = $gets[1];
}
這將在頁面的開頭設置您的get參數,並且腳本應該像以前一樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.