1

设置

我的文件结构设置如下:

/root
   | 
   /api
      | 
      /Slim PHP framework
      index.php
   | 
   index.php

Slim 目录内部包含从数据库中检索数据index.php所需的路由。例如JSONMongo

$app->get('/users(/:id)', function($id = null) use ($app, $collection) {
     /* Do mongo search and echo json_encoded data back */
});

我有一个.htaccess文件包含:它.php从根目录下的文件中删除扩展名。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php`

问题

我可以JSON使用 url: 访问我的数据http://localhost:8888/root/api/index.php/users。但是,我想做的是使用 url 访问数据:http://localhost:8888/root/api/users

4

3 回答 3

3

如果我理解正确,那又如何呢?

RewriteRule ^api/users/(.*)$ /root/api/index.php/users/$1 [L]
RewriteRule ^api/users$ /root/api/index.php/users [L]

那应该允许这个 URL。

http://localhost:8888/api/users/1

它也会允许这样做

http://localhost:8888/api/users

编辑:

这应该允许您在用户之后添加一个数字。还缩短了 URL,因此您不必在 URL 中也包含 root。

于 2013-07-03T15:35:36.700 回答
1

假设,您的 .htacces 位于网站根目录“/”

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_URI} !/index.php [NC]
RewriteRule ^(.*?/api)/(.*)$ $1/index.php/$2 [NC,L]

这将重定向

http://localhost/root/api/users/1 => http://localhost/root/api/index.php/users/1
http://localhost/root/api/data/20 => http://localhost/root/api/index.php/data/20
于 2013-07-03T16:58:31.483 回答
0

需要注意的一点是,规则的顺序也很重要,因此如果您需要将http://example.com/usershttp://example.com/users/重写/重定向到http://example.com/ userinfo/同时将 http://example.com/users/uname 重写http://example.com/scripts/script.php?id=uname那么这个应该可以工作:RewriteEngine on

RewriteEngine on 
RewriteRule ^users/$ /userinfo/ [L]
RewriteRule ^users/(.*)$ /scripts/script.php?id=$1 [L]
RewriteRule ^users$ /userinfo/ [L]

可能有一个更好的解决方案,少一行,但这个对我有用。

于 2016-11-09T16:04:01.650 回答