2013-07-03 3 views
1

НастройкаПодкаталог URL переписывания PHP

Я моя файловая структура создана как так:

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

index.php внутри Слим каталог содержит маршруты, необходимые для получения данных JSON из базы данных Mongo , Например.

$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

+0

Какие изменения в вашем URL-адресе JSON и что остается статическим? Вы всегда будете звонить index.php? Всегда ли это заканчивается на '/ users'? –

+0

index.php всегда будет там, потому что это файл, который запускает маршрутизацию. URL изменяется в зависимости от того, какие данные необходимы, например. запрос GET на '/ api/index.php/users/1' получит пользователя с идентификатором # 1, а параметр' # 1' не получит всех пользователей. также, в будущем, я могу закончить что-то еще или просто придерживаться чего-то типа 'api/data /' для извлечения всего. Поэтому для этой ситуации просто '/ users /' будет делать спасибо – ashley

ответ

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 

EDIT:

Это должно позволить вам добавить номер после пользователей. Также сокращен URL-адрес, поэтому вам не нужно включать root в URL-адрес.

+0

не работает, я боюсь. Возможно ли вместо выполнения '/ api/users' делать'/api/v1/users' и использовать местозаполнитель как таковую как часть index.php? – ashley

+0

Что именно не работает?вы получаете сообщение об ошибке? или что не происходит .. см. мое обновление –

+0

Спасибо! это прекрасно и жаль за последнее сообщение – ashley

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 
0

Одна вещь отметить, последовательность правил также имеет важное значение, так что если вам необходимо переписать/переадресовать http://example.com/users И http://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] 

Может быть лучшее решение с одной линией меньше, но это работает для меня.

Смежные вопросы