簡體   English   中英

PHP RESTful路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM