2013-02-12 12 views
0

Ниже мой файл .htaccess:RewriteCond из Htaccess не работает должным образом

Options -Indexes 
RewriteEngine On 
RewriteBase/

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

RewriteRule ^api/(.*)$ api/index.php/api/$1 [L] 
RewriteRule ^lib/(.*) lib/$1 [QSA,L] 
RewriteRule ^applications/(.*) applications/$1 [QSA,L] 
RewriteRule ^([^\/]*)/index.php /lib/vt-index.php?clientid=$1 [QSA,L] 
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA] 

У меня есть несколько вопросов:

  1. Lib и приложения являются папками, но RewriteCond %{REQUEST_FILENAME} !-d не имеет никакого эффекта, я должен записывать условие для lib и приложения отдельно.
  2. Основная проблема заключается в том, что мои вызовы api не дают мне результата. Я вызываю свой api как www.myweb.com/api/User/xyz%40gmail.com, который перенаправляется на www.myweb.com/api/index.php/api/User/xyz%40gmail.com, что является правильным. Но призывы к этому пустые.

ответ

3

A RewriteCond распространяется только на следующее: RewriteRule. Условия не устанавливаются глобально и не применяются к нескольким правилам. Вам необходимо либо повторить условие для каждого правила:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^api/(.*)$ api/index.php/api/$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^lib/(.*) lib/$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^applications/(.*) applications/$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\/]*)/index.php /lib/vt-index.php?clientid=$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA] 

Или вы можете свести на нет состояния и пусть он проходит через первый:

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

RewriteRule ^api/(.*)$ api/index.php/api/$1 [L] 
RewriteRule ^lib/(.*) lib/$1 [QSA,L] 
RewriteRule ^applications/(.*) applications/$1 [QSA,L] 
RewriteRule ^([^\/]*)/index.php /lib/vt-index.php?clientid=$1 [QSA,L] 
RewriteRule ^([^\/]*)/([^?]*) /lib/vt/$2?clientid=$1 [QSA] 

Таким образом, противоположность ваших условий получить применяются к правилу, которое просто говорит «ничего не делать и больше не переписывать». Для того чтобы любой из нижних 5 правил был применен, условия в верхней части были бы не были выполнены.

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