@rozochkin

Как настроить location и rewrite в nginx?

2-й день вожусь с nginx, fastcgi, прошу помощи.
Проект лежит в /home/test/www/project/
Структура папок такая:
в /project/
*.php //php скрипты
css, images, videos // папки в них контент

Захожу в браузер subdomain.domain.com/project/main.php (либо index.php стоит переброс на main.php). Допустим смотрю видео subdomain.domain.com/project/main.php?v=555, все нормально и хорошо работает.

Необходимо следующее:
Заход по ссылке типа subdomain.domain.com/project/555, чтобы 555 передавалось в index.php в качестве get параметра. То есть был аналог запроса subdomain.domain.com/project/main.php?v=555, но без редиректа, то есть чтобы в строке браузера оставалось subdomain.domain.com/project/555.

Никаких location относительно папки project в nginx default нет.
Добавляю первый:

location /project/ {
     rewrite ^/project/(.*)$ /project/main.php?i=$1 last;
}


Перегружаю nginx, обновляю страницу, сбиваются ссылки на картинки, стили, js, то есть не вижу ничего кроме текста и контуров картинок.

Пробую второй вариант:

location /project {
                index index.php;
                if (!-e $request_filename) {
                rewrite ^/([^?]*)(?:\?(.*))? /project/main.php?i=$1 last;
                }
                if ($uri ~* "\.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$") {
                        expires max;
                        break;
                }

        }


Тоже самое.

В чем может быть проблема? очень прошу совета, сил уже нет.
  • Вопрос задан
  • 29401 просмотр
Пригласить эксперта
Ответы на вопрос 3
@rozochkin Автор вопроса
итоговый конфиг, с которым все заработало
location /project/ {
	root /home/www;
	index index.php;
	try_files $uri @php;
} 
location /project/content/ {
	alias /home/www/project/content/;
	valid_referers blocked *.mysite.com;
	if ($invalid_referer) {
	     return   403;
        }
	try_files $uri @php;
}
location @php {
	rewrite ^/([^?]*)(?:\?(.*))? /project/main.php?i=$1 last;
}


если что неверно, поправьте пожалуйста
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
А location под статику отдельный написали?
Ответ написан
@rozochkin Автор вопроса
Благодарю всех!
получилось с помощью:
location /project/ {
	alias /home/test/www/project/;
	index main.php;
	try_files $uri @php;
}             
location @php {
	rewrite ^/project/(.*)$ /project/main.php?i=$1 last;
}

вложенные location, nginx на машине клиента почему то не хотел воспринимать.

и тут возник вопрос, а как теперь правильно запретить после всех этих действий хотлинкинг в папке:
/project/content/
там хранятся в сабдиректориях файлы 2х форматов mp4/mov
также там хранятся превью на эти видео, форматов jpg/jpeg

попробовал дописать следующее, но картинки/видео не грузятся:
location /project/content/ {
     valid_referers none blocked mysite.com *.mysite.com;
     if ($invalid_referer) {
        return   403;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы