LINUX.ORG.RU
решено ФорумAdmin

NGINX теряет данные из GET

 , , , ,


0

2

В условиях VDS трудятся NGINX и php-fpm. Статика отдается, php вроде выполняется, но данные из урлов куда-то теряются.

На хостинге все работало (пишем к любой странице ?in и подгружается формочка входа):
http://dodge4.pp.ua/?in
http://dodge4.pp.ua/bez-kategorii/?in
http://dodge4.pp.ua/davaite-bez-davaite-a-davaite.html?in

На хостинге был такой .htaccess

#включить перенаправление
RewriteEngine on

#база для перенаправления
RewriteBase /

#для доменов site.ru (c WWW и без WWW)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

#для поддоменов (*.site.ru или www.*.site.ru)
RewriteCond %{HTTP_HOST} (www\.)?(.*)\.*\.*$

#правило для направления всех запросов на файл index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

А вот на VDS моя движуха не заводится (не подгружает форму входа) http://derminator.tk/?in Если фаербагом поглядеть, то видим примерно такое [HTTP/1.1 404 Not Found 14мс]

Этапы колдовства с вирт-хостом таковы...

Вирт-хост сначала был такой:

server {
	server_name derminator.tk;
	root /var/www/cms;
	index index.php;

	location ~ \.php$ {
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}
}
Так php переваривал только главную страницу, остальные - 404 ошибка от сервера.

Потом дописал такой location:

server {
	server_name derminator.tk;
	root /var/www/cms;
	index index.php;

	location / {
		try_files $uri /index.php;
	}

	location ~ \.php$ {
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}
}
И php уже смог собирать все страницы. А 404е ошибки отдавала уже cms.

Но вот если в урле ?in то до index.php он так и не доходит. Что-то у меня не так, но не понимаю что...

Ежели сделать файлик test.php и в него написать

<?php echo $_GET['in']; ?>
То видим, что данные он из GET получает: http://derminator.tk/test.php?in=tell_me_whats_wrong

А вот index.php никак не видит ?in в адресе :( даже не знаю как сделать чтоб увидел...

P.S: с NGINX познакомился недельку назад и вот уже первый секс!


RewriteEngine on
nginx + php-fpm

эээ... такие правила реврайта в файле .htaccess работают только в апаче. на php-fpm нужно писать по другому.

kam ★★
()
Ответ на: комментарий от kam

Ну так я же писал, что это на хостинге так работало. У nginx (ясное дело) это через location делается...

Научный тык помог :) Теперь вопрос в том, не огребусь ли я на 404. Конфиг такой.

server {
	server_name derminator.tk;
	root /var/www/suk/web;
	index index.php;

	location / {
		try_files $uri $uri/ /index.php?$args;
	}

	location ~ \.php$ {
		try_files $uri $uri/ /index.php?$args;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi_params;
	}
}

Работает же! http://derminator.tk/kosmicheskii-kriptarhei-osnovnie-momenti.html?in

k0ttee
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.