0

我的问题很简单。我在 PHP 中实现 RESTful 服务,并且我正在使用 mod-rewrite 将干净的 URL 重定向到 index.php。例如,如果我有这个 url 来获取代码为 12345 的课程。

http://localhost/courses/12345我将在以下结构中将其重定向到 index.php

http://localhost/index.php?manager=CoursesManager&courseCode=12345 

在 index.php 中查找 CoursesManager.php,如果能够找到它,我会创建一个 CourseManager 对象,然后处理查询字符串并调用我需要的方法。

但是,例如,如果我想知道 Course 可以拥有的类的类型,我不知道如何重写 url。假设网址是

http://localhost/courses/12345/typesofclass

我怎么能重写它?

谢谢你。

4

2 回答 2

0

尝试这个

RewriteRule /courses/([0-9]+)/([a-zA-Z]*) /index.php?manager=CoursesManager&courseCode=$1&type=$2 [L]
于 2012-12-13T15:15:09.463 回答
0

在您的情况下,最好的方法是创建一个全面的 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 并加载所需的数据/脚本。

如果需要,您还可以添加网址:

+----+-----------------------------+--------------------------------------------+
| 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];
}

这将在页面开头设置您的获取参数,并且脚本应该像以前一样工作。

于 2012-12-13T15:18:47.970 回答