ПРОЕКТЫ 


  АРХИВ 


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: Трудности с организацие й поддоменов и точкой вх ода для php-скрипта



2011/8/17 J3FF3 <nginx-forum@xxxxxxxx>:
>>> Если урлы сделаны нормально и
> проблема только в том, что исходный код
>>> php файлов можно получить запросом
>
> Да не исходный, а файлы запускаются
> отдельно и результат выполнения
> вылазит в браузере. Если выдергнуть

Чтобы они отдельно не запускались - надо не иметь локейшна,
проксирующего их на fastcgi сервер. Например, так:

location / {
  root /path/to;
}

location = /index.php {
  fastcgi_pass ...;
}

# и всё. никаких ~ \.php$

Дальше возвращаемся к вопросу об урлах.

> #тут происходит редирект, если
> запрашивают вложенные файлы
>        location ~ /application/.+ {

Примеры урлов, которые попадут в этот локейшн:
/application/stat
/application/category/main.php
/files/application/movie.ogg
/images/application/1.gif

Вывод: пользоваться регексповыми локейшнами нужно с большой
осторожностью, особенно когда мало опыта. Лучше - не пользоваться.

>                #deny all;
>                rewrite ^ / permanent;
>        }
>
>        location ~ \.php$ {
>                root /home/www/site.com;
root здесь совершенно лишняя директива. Тем более, что вы уже объявили
root на уровне server.
>                fastcgi_pass 127.0.0.1:9000;
>                fastcgi_index index.php;
fastcgi_index - тоже.
>                fastcgi_param  DOCUMENT_ROOT    /site.com;
>        }
> }
>
> Сейчас при запросе /application/startup.php
> происходит редирект на главную, что и
> нужно было. Правда, не знаю за что тогда
> отвечает:
> try_files $uri $uri/ index.php?$query_string;
> вроде оно должно редиректить на index.php
> если ктото запрашивает файл или
> директорию.
>

try_files не делает редиректов. Но да, запросы будут обрабатываться
index.php. Только чтобы это произошло нужно чтобы запрос попал в
локейшн с try_files. А вы объявили регексповый локейшн (даже два). И
наверное, ещё не знаете, что регексповые проверяются раньше всех.
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#location


Теперь, когда мы знаем, что кроме /index.php никакие запросы не должны
уходить на fastcgi, все скрипты лежат в application/ и статики для
раздачи там нет, правильный конфиг существенно упрощается:

# главная страница заслуживает отдельного локейшна
location = / {
  include fastcgi.conf;
  fastcgi_pass ...;
  fastcgi_script_filename /path/to/index.php;
}

location /application/ {
  return 404; # это хороший вариант
  rewrite ^ / permanent; # это то что вы хотели
}

# всё остальное
location / {
  root /path/to;
  expires 1w;
  try_files $uri $uri/ @php;
}

location @php {
  include fastcgi.conf;
  fastcgi_pass ...;
  fastcgi_script_filename /path/to/index.php;
  fastcgi_param QUERY_STRING r=$uri&$args;
}

# этот локейшн нужен только если сайт выдаёт ссылки на /index.php
location = /index.php {
  include fastcgi.conf;
  fastcgi_pass ...;
  fastcgi_script_filename /path/to/index.php;
}
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.