rewrite'ы в nginx

Ктулху
На сайте с 17.07.2007
Offline
43
801

Здраствуйте. Есть сайт. В поддиректории есть папка drupal с движком ( как Вы уже догадались каким ). Есть два локейшена. Один для php, второй - реврайт.

 

location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php.socket;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}


location /drupal {
if (!-e $request_filename) {
rewrite ^/drupal(.*) /drupal/index.php?q=$1 last;
}
}

Рерайт работает. Все харашо. НО, если в адрес изначально подходит под первый локейшин ( т.е. заканчивается на .php ), тогда дело до локейшина с реврайтом не доходит, и nginx сразу вываливается с 404 ( "No input file specified" ). Почитав про работу location'ов, стало понятно, что сначала проверяются обычные локейшены, потом с регулярными выражениями. Если найден с регуляркой - применяется он, если нет - то из обычных.

Я пробовал сделать второй локейшин вот так: location = /drupal ( чтобы nginx сразу остановился на нем, и не проверял дальше ), но тогда он мне возвращает исходный текст index.php. Rewrite срабатывает, но поиска по location'ам с новым uri не производится. И соответственно php не исполняется, а отдается как статика. Прошу пролить свет на эту ситуацию

З.Ы. через try_files рерайт писать пробовал, но тогда php отдает как статику. Остановился пока на этом варианте, т.к. часть рерайтов работает.

FoxIT - Студия веб-разработки
Andreyka
На сайте с 19.02.2005
Offline
822
#1

На сайте Сысоева как раз есть пример про drupal

Рабочий

Не стоит плодить сущности без необходимости

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий