Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: index internal redirect
On 16.06.2011 21:59, Igor Sysoev wrote:
Сейчас при нахождении индексного файла делается внутрений редирект.
Это позволяет работать конфигурациям типа
location / {
index index.php;
}
location ~ \.php$ {
...
}
Но иногда нужно, чтобы обработка проиходила без редиректа,
кроме случая "запрещения явного запроса /index.html", какие еще
могут быть причины для обработки без редиректа, если не секрет ?
например, для запрещения явного запроса /index.html,
хотя это можно решить так:
location = / {
index index.html;
}
location = /index.html {
internal;
}
немножко другой случай, у сайта стоит index index.php;
и администратор хочет запретить явный запрос к /index.php
если будет "обработка индексного файла без внутреннего редиректа" -
то в этом случае в ответ на запрос клиента будет отдан php-исходник
а ведь сайтов с динамическими индексными страницами index.php
больше в современном интернете, чем со статическими index.html
если "обработка индекского файла без внутреннего редиректа" нужна
только "иногда", может быть для этого случая хватит и существующего
уже сейчас функционала location = / { try_files /index.html =404; } ?
Возможно, имеет можно что-то придумать со звёздочками, скобочками
и тому подобному.
таким образом сейчас синтаксис конфигурационного файла nginx
начинает плавно дрейфовать в сторону апачевского mod_rewrite ?
а вот что было год назад: http://www.lexa.ru/nginx-ru/msg34942.html
Например, сейчас try_files поддерживает слэш
в конце параметра, обозначающий тестирование каталога, и знак равно
для обозначения кода ошибки для fallback'а:
try_files $uri $uri/ =404;
Для try_files хотелось бы придумать ещё два модификатора - делать
внутренний редирект при нахождении файла (как сейчас делается для index)
и проверка абсолютного пути (а не относительно root/alias).
Например, абсолютный путь - два начальных слэша:
try_files //path/to/maintenance.html $uri $uri/ @php;
если планируется когда-то делать полноценную версию nginx для windows,
то синтаксис //path/to/maintenance.html для указания абсолютного имени
файла не очень хорош: //"C:\\Documents and settings\\path\\to\\file"
может быть такой вариант, с помощью префикса "absolute_path::" ?
try_files absolute_path::/path/to/maintenance.html $uri $uri/ @php;
ведь такая возможность будет нужна очень редко, и кроме того,
такой синтаксис - // - является потенциально очень опасным,
например, если кто-то вместо /etc/passwd; случайно ошибется
и наберет в конфиге //etc/passwd; - тогда путь из относительного
превратится в абсолютный. что-то аналогичное есть в C с '=' и '=='.
аналогично и с внутренним редиректом:
try_files internal_redirect::/system/maintenance.html $uri $uri/ @php;
и, комбинация этих двух параметров в произвольном порядке:
try_files absolute_path::internal_redirect::/system/maintenance.html
или
try_files internal_redirect::absolute_path::/system/maintenance.html
по крайней мере, этот вариант расширения синтаксиса try_files находится
достаточно далеко от синтаксиса апачевского mod_rewrite и sendmail.cf.
вместе с тем, он обладает хорошей читаемостью при беглом просмотре,
модификаторы сразу бросаются в глаза и их очень трудно не заметить.
если надо иметь возможность указывать какие-то дополнительные параметры
для этих модификаторов, тогда можно в дальнейшем расширить синтаксис еще
дальше:
internal_redirect( дополнительные параметры )::/system/maintenance.html
или
internal_redirect{ дополнительные параметры }::/system/maintenance.html
--
Best regards,
Gena
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|