2014-11-15 6 views
1

У меня есть приложение, которое управляет марионеток маршруты, но я не хочу обращаться с ними для запросов API вызовов в server.com/api/anything/at/all.htaccess правило, казалось бы, игнорировали

Мое правило выглядит это на данный момент, но Марионетки, кажется, всегда ловить его, даже если это для/API/*

# ------------------------------------------------------------------------------ 
# | Marionette                 | 
# | If it's not for /api/*, then handle it          | 
# ------------------------------------------------------------------------------ 

<ifModule mod_rewrite.c> 
    DirectorySlash Off 
    RewriteEngine On 
    RewriteCond %{THE_REQUEST} ^.*/index.php 
    RewriteCond %{REQUEST_URI} !^/api/ [NC] 
    RewriteRule ^(.*)index.php $1 [R,L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !^/index\.php 
    RewriteRule (.*) index.php 
</ifModule> 
# ------------------------------------------------------------------------------ 
# | Phalcon                 | 
# | If it fell through, handle with Phalcon         | 
# ------------------------------------------------------------------------------ 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule> 

Может кто-нибудь сказать мне, что я сделал неправильно здесь, пожалуйста? Благодарю.

Редактировать: Если это дает какую-либо ясность, вышеуказанный .htaccess находится в моей/общей папке. В корневой папке у меня есть:

# ------------------------------------------------------------------------------ 
# | Phalcon                 | 
# ------------------------------------------------------------------------------ 

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ public/ [L] 
    RewriteRule (.*) public/$1 [L] 
</IfModule> 

Это общедоступное переписывание работает нормально. Я просто подумал, что поделюсь им, если что-то об этом повлияет на публику, о котором я не думаю. Благодаря!

ответ

0

Вы Marionette правило должно быть таким:

<ifModule mod_rewrite.c> 
    DirectorySlash Off 
    RewriteEngine On 
    RewriteCond %{THE_REQUEST} ^.*/index.php 
    RewriteCond %{REQUEST_URI} !^/api/ [NC] 
    RewriteRule ^(.*)index.php $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{THE_REQUEST} !\s/+(index\.php|api/) [NC] 
    RewriteRule^index.php [L] 
</ifModule> 
+0

Я заменил мой блок с вашими, и я все еще получаю тот же ответ. server.com/ - Marionette server.com/api/ - Marionette server.com/api/test - Marionette – Drew

+0

Да, это сработало - спасибо. Любая идея о том, как я гарантирую, что он работает только на server.com/api/x/y/z? Я тестировал с server.com/marionette/api/ и потому, что он содержал «api», он чувствовал, что это правило действует на phalcon. Итак, я хочу, чтобы правило утверждало, что/api/находится в начале? – Drew

+0

Я изменил правило дальше, чтобы соответствовать '/ api /' только при запуске. – anubhava

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