2015-04-25 5 views
1

Я застрял на проблеме с правильным .htaccess в моем restful webapp. Код api для REST должен быть доступен через URL-шаблон */api/**, который должен быть перенаправлен на index.php в папке api.Apache mod_rewrite Restful api

Все остальные URL-адреса (кроме статических файлов) должны быть перенаправлены на index.html в корневую папку.

Я следующая структура папок:

 
- api 
-- application/... 
-- vendor/... 
-- index.php 
- public 
-- css/... 
-- js/... 
- index.html 
- .htaccess 

И это мой .htaccess содержание:

Options +FollowSymLinks 
RewriteEngine on 

# redirect all api calls to /api/index.php 
RewriteCond "%{REQUEST_URI}" "^/api" 
RewriteRule "^/api/(.+)$" "/api/index.php$" [QSA,L] 

# If the request is a file, folder or symlink that exists, serve it up 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+)$ - [S=1] 

# otherwise, serve your index.html app 
RewriteRule ^(.+)$ /index.html [L] 

Я попытался добавить еще один файл .htaccess в папку апи, для перенаправления URL-адреса с/api/*, но без каких-либо успехов. Поэтому я попытался перенаправить его с помощью правила в .htaccess выше.

Я думаю, что правила ниже могут быть правильными. Поскольку перенаправление работает должным образом. Но правило/api/не работает. Кажется, что запросы также перенаправлены на index.html

Что мне не хватает?

+0

удалить '$' от полученного пути – Deadooshka

ответ

2

Незначительных щипками вашего шаблона регулярного выражения является то, что вам нужно:

DirectoryIndex index.php index.html 
Options +FollowSymLinks 
RewriteEngine on 

# redirect all api calls to /api/index.php 
RewriteRule ^api/((?!index\.php$).+)$ api/index.php [L,NC] 

# If the request is a file, folder or symlink that exists, serve it up 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# otherwise, serve your index.html app 
RewriteRule ^(.+)$ index.html [L] 
+1

Спасибо. Он работает как charme :) –

+1

Извините, я думал, что принял его, но просто отметил его как полезный;) –

+0

Нет проблем, рад, что это сработало для вас. – anubhava

1

Попробуйте следующий набор правил:

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_URI} !^/api/index\.php$ [NC] 
RewriteCond %{REQUEST_URI} ^/api [NC] 
RewriteRule ^api/.* /api/index.php$ [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l # to check for symbolic links 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* /index.html [L] 

RewriteRule . - [L]