2015-08-28 3 views
1
RewriteEngine on 

RewriteRule ^admin/api/(.*)$ admin/api.php?method=$1 [QSA,L] 
RewriteRule ^admin/(.*)$ admin/index.php [QSA,L] 

RewriteRule ^api/(.*)/$ api.php?method=$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_URI} !\.(?:css|js|jpg|png|gif|svg|eot|ttf|woff)$ [NC] 
RewriteRule (.*) index.php [QSA,L] 

Я хочу отдельную точку входа API для модуля администрирования, но переписать не работает так, как я хочу. Что случилось с правилами перезаписи?Некоторые правила перезаписи не работают (.htaccess)

host.com/page - работы (/index.php),

host.com/admin/page - работы (/admin/index.php),

host.com/admin/ api/section - выполняет /index.php (но ожидаемый /admin/api.php)

ответ

1

Это потому, что ваши правила зацикливаются, поскольку шаблон admin/.* также соответствует admin/api.php. У вас есть следующие правила:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^admin/api/([^.]+)$ admin/api.php?method=$1 [QSA,L] 

RewriteRule ^admin/([^.]+)$ admin/index.php [L] 

RewriteRule ^api/([^.]+)/$ api.php?method=$1 [L] 

RewriteCond %{REQUEST_URI} !\.(?:css|js|jpg|png|gif|svg|eot|ttf|woff)$ [NC] 
RewriteRule (.*) index.php [L] 
+0

Это решение работает! Не могли бы вы объяснить, почему это не останавливается на первом матче с флагом L? – user3168823

+0

'L' не все правила, которые он просто заставляет' mod_rewrite' запускать с самого начала. Это похоже на 'continue' цикла' while'. – anubhava

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