ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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


 




Copyright © Lexa Software, 1996-2009.