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