Re: Сложный реврайт

Валентин Бартенев ne на vbart.ru
Пт Ноя 25 19:16:37 UTC 2011


On Friday 25 November 2011 19:38:37 Юрий Гончаров wrote:
> Приветствую всех. Ковырял пол дня и так не смог побороть. Помогите
> разрешить задачу.
> 
> Есть http://domain.com
> Если файл (или папка) не существует для
> http://domain.com/anyfolder/somethingelseunknown то нужно реврайт на
> http://domain.com/anyfolder/front.php
> (если два уровня вложенности, все равно брать первую папку, т.е. для
> http://domain.com/anyfolder/anyfolderinside/somethingelseunknown
> нужен реврайт на http://domain.com/anyfolder/front.php)
> anyfolder - может быть любой.
> В тоже время если вызывать http://domain.com/somethingelseunknown или
> если при попытке реврайта на http://domain.com/anyfolder/front.php -
> http://domain.com/anyfolder/front.php - не будет существовать (или
> файла front.php нет или вообще нет папки anyfolder) - то тогда
> реврайтить на http://domain.com/public/front.php
> 
> Попробую обобщить
> 1. Если файл не существует И есть хотя бы одна папка в URI - то
> попробовать http://domain.com/anyfolder/front.php
> 2. (Если файл не существует И перейти по 1. не удалось) ИЛИ (в URI нет
> папок (типа http://domain.com/wrongfile)) то на
> http://domain.com/public/front.php
> 
> Очень жду. Спасибо
> 

Написали очень сложно.

Предположим, что все три кейса вы хотите обрабатывать в пределах одного 
локэйшена:

  location ~ ^(/[^/]+)/.+$ {
    try_files $uri $1/front.php /public/front.php =404;
  }

Если хотите в разных, то:
  
  location ^~ /public/front.php {
  
  }

  location ~ ^/[^/]+/front.php$ {
    try_files $uri /public/front.php;
  }
 
  location ~ ^(/[^/]+)/ {
    try_files $uri $1/front.php;
  }

--
Валентин Бартенев
  



Подробная информация о списке рассылки nginx-ru