2014-01-04 2 views
1

Это может быть предложено уже, но я изо всех сил здесь и не могу понять, я не очень хорошо с .htaccessНеограниченное парные переменные через .htaccess

Я работаю на API и хотел бы принять несколько переменных, таких как

http://www.website.com/api/CONTROLLER/person/id/1/sort/name/limit/2

и хотел бы получить что-то вроде

$_REQUEST['CONTROLLER']=person; 
$_REQUEST['id']=1; 
$_REQUEST['sort']=name; 
$_REQUEST['limit']=2; 

Я сейчас делаю это с помощью PHP с помощью $_SERVER[REQUEST_URI] и взорваться, но хотел бы узнать, если есть способ сделать это на .htaccess непосредственно

Если вы знаете, какой из них будет работать лучше будет рад выслушать это!

+0

Это может быть сделано с помощью mod_rewrite, да, но это кажется ужасно сложным и ограниченным. Обычно это делается с помощью * router *, реализованного в PHP. – deceze

+0

@deceze, чтобы вы считали, что он будет работать лучше, или будет проще просто сохранить его таким, какой он есть? – Saikios

ответ

0

Try:

RewriteEngine On 
RewriteRule ^api/([^/]+)/([^/]+)(/.*)? /api/$3?$1=$2 [L,QSA] 

Если предположить, что ваш PHP скрипт файл index.php в вашем /api/ каталоге. В противном случае, вы должны также включать в себя (в конце):

RewriteCond %{QUERY_STRING} .+ 
RewriteRule ^api/$ /path/to/your/script.php [L,QSA] 

Обратите внимание, что это зависит от mod_rewrite двигателя обхвата внутри. Существует параметр сервера, который ограничивает максимальное количество внутренних переадресаций, и если URL-адрес действительно длинный, он попадает в пределы внутренней рекурсии и возвращает 500. Вы можете изменить это, используя директиву LimitInternalRecursion.

+0

Привет Джон Лин, это в /api/index.php, но ваш апи дает мне НЕ НАЙДЕН, я также попытался RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule^ (. +) $ index.php/$ 1 [NC, L] RewriteRule^api /([^/]+)/([^/]+)(/.*)?/api/$ 3? $ 1 = $ 2 [L, QSA] Но ничего не получилось – Saikios

+0

Это, вероятно, происходит из-за PATH_INFO. Index.php выполняется сразу же с места в карьер, и правила, вероятно, не применяются. '! -f' не поможет ни потому, что'% {REQUEST_FILENAME} 'считает, что есть' index.php' в каталоге/api/'. Вы можете попробовать переименовать 'index.php' в нечто другое и использовать второе правило. –

+0

Большое спасибо за вашу помощь и извините за то, что вы не торопитесь, но я не смог заставить ее работать :(, протестирован с /api/script.php api/script.php и/var/www/html/api/script .php во всех случаях Я получил не найденную страницу – Saikios

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