Я хочу, чтобы каждый звонок с
http://localhost/api/
(как корневая папка ), например, http://localhost/api/get/users
самом деле есть http://localhost/api/index.php?handler=get/users
.
http://localhost/api/get/user/87
должен быть http://localhost/api/index.php?handler=get/user/87
где в index.php я бы поймал обработчик переменной $ _GET и обработал его в надлежащим образом.
Если у меня есть такие правила перезаписи, он работает только для одного
RewriteRule ^([^/\.]+)/?$ index.php?handler=$1 [QSA,L]
два
RewriteRule ^([^/\.]+)/?$ index.php?handler=$1 [QSA,L] RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?handler=$1&handler2=$2 [QSA,L]
три слэша и так далее …
RewriteRule ^([^/\.]+)/?$ index.php?handler=$1 [QSA,L] RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?handler=$1&handler2=$2 [QSA,L] RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?handler=$1&handler2=$2&handler3=$3 [QSA,L]
Поэтому для первого случая будет работать http://localhost/api/a
, но http://localhost/api/a/b
вызовет ошибку Not Found .
EDIT : Это должно быть хорошо?
RewriteRule ^(.*)$ index.php?handler=$1 [L,QSA]
Ваш (собственный) ответ должен быть хорошим, просто имейте в виду, что он перенаправит все входящие URL-адреса на index.php
. Т.е. если у вас есть статические файлы, например /js/jquery.js
то он будет изменен на index.php?handler=/js/jquery.js
.
Если вы хотите избежать проблем, попробуйте что-то вроде:
RewriteCond %{REQUEST_URI} !(.*)\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico)$ [NC] RewriteRule ^(.*)$ index.php?handler=$1 [QSA,L]
Попробуйте использовать директиву RewriteLog
: она поможет вам RewriteLog
такие проблемы:
# Trace: # (!) file gets big quickly, remove in prod environments: RewriteLog "/web/logs/mywebsite.rewrite.log" RewriteLogLevel 9 RewriteEngine On
Мой любимый инструмент для проверки regexp:
http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)