Это баг или фича? и как это можно победить без использовани if ?

maxhl на hitline.net.ua maxhl на hitline.net.ua
Чт Дек 24 21:58:56 MSK 2009


Вечер добрый. Спрашиваю еще раз потому чо в первый раз сообщения видимо
недошли.
Есть набор правил .htaccess:
____________________________________________________________________________
RewriteCond %{QUERY_STRING} (.*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?permalink=$1&query_str=%1 [L,QSA]

#feed
RewriteRule ^feed/rss/$ _cache/rss_main.xml [L,QSA]

#sitemap
RewriteRule ^sitemap/$ index.php?page=sitemap [L,QSA]
RewriteRule ^sitemap/([0-9]+)/$ index.php?page=sitemap&spage=$1 [L,QSA]

#contact form
RewriteRule ^contact/$ index.php?page=contact_form [L,QSA]
____________________________________________________________________________
Примеры из руководства неработают.
Сделал так:
server {
    listen 80;
    server_name test.info;
    access_log /home/logs/t_access.log combined;
    error_log /home/logs/t_error.log debug;
    server_name_in_redirect off;
    root /home/test;
    index index.php index.pl index.cgi index.html index.htm;

    location / {
	try_files      $uri  $uri/  @nedrupal;
    }

    location ~ \.php$ {
	try_files      $uri  @nedrupal;
	fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	fastcgi_param SCRIPT_NAME $fastcgi_script_name;
	fastcgi_param PATH_INFO $fastcgi_script_name;
	fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
	fastcgi_pass_request_body off;
	client_body_in_file_only clean;
	fastcgi_param	REQUEST_BODY_FILE  $request_body_file;
	fastcgi_param	CONTENT_TYPE	$content_type;
	fastcgi_param	CONTENT_LENGTH	$content_length;
	fastcgi_param	DOCUMENT_ROOT	$document_root;
	fastcgi_param	DOCUMENT_URI	$document_uri;
	fastcgi_param	GATEWAY_INTERFACE	CGI/1.1;
	fastcgi_param	QUERY_STRING	$args;
	fastcgi_param	REMOTE_ADDR		$remote_addr;
	fastcgi_param	REMOTE_PORT		$remote_port;
	fastcgi_param	REQUEST_URI		$request_uri;
	fastcgi_param	REQUEST_METHOD	$request_method;
	fastcgi_param	SERVER_ADDR		$server_addr;
	fastcgi_param	SERVER_NAME		$server_name;
	fastcgi_param	SERVER_PORT		$server_port;
	fastcgi_param	SERVER_PROTOCOL	$server_protocol;
	fastcgi_param	SERVER_SOFTWARE	nginx/$nginx_version;
	fastcgi_param	REDIRECT_STATUS 200;
	fastcgi_index	index.php;
    }

    location @nedrupal {
	fastcgi_param SCRIPT_FILENAME  /home/person51/index.php;
	fastcgi_param SCRIPT_NAME /index.php;
	fastcgi_param PATH_INFO /index.php;
	fastcgi_pass unix:/mnt/md0/php-fcgi.sock;
	fastcgi_pass_request_body off;
	client_body_in_file_only clean;
	fastcgi_param	REQUEST_BODY_FILE		$request_body_file;
	fastcgi_param	CONTENT_TYPE		$content_type;
	fastcgi_param	CONTENT_LENGTH		$content_length;
	fastcgi_param	DOCUMENT_ROOT		$document_root;
	fastcgi_param	DOCUMENT_URI		$document_uri;
	fastcgi_param	GATEWAY_INTERFACE	CGI/1.1;
	fastcgi_param	QUERY_STRING	permalink=$uri&query_str=$args;
	fastcgi_param	REMOTE_ADDR			$remote_addr;
	fastcgi_param	REMOTE_PORT			$remote_port;
	fastcgi_param	REQUEST_URI			$request_uri;
	fastcgi_param	REQUEST_METHOD		$request_method;
	fastcgi_param	SERVER_ADDR			$server_addr;
	fastcgi_param	SERVER_NAME			$server_name;
	fastcgi_param	SERVER_PORT			$server_port;
	fastcgi_param	SERVER_PROTOCOL		$server_protocol;
	fastcgi_param	SERVER_SOFTWARE		nginx/$nginx_version;
	fastcgi_param	REDIRECT_STATUS 200;
	fastcgi_index	index.php;
    }

В результате добился :

$_SERVER["QUERY_STRING"]=permalink=/video-1/Smotret-Kino-Besplatno-7/&query_
str=
$_SERVER["REQUEST_URI"]=/video-1/Smotret-Kino-Besplatno-7/
$_SERVER["SCRIPT_NAME"]=/index.php

Для сравнения в апаче :

$_SERVER["QUERY_STRING"]=permalink=video-1/Smotret-Kino-Besplatno-7/&query_s
tr=
$_SERVER["REQUEST_URI"]=/video-1/Smotret-Kino-Besplatno-7/
$_SERVER["SCRIPT_NAME"]=/index.php

Почему в nginx $uri содержит самый первый символ слеш а в апаче нет? Для
скриптов скомпиленных ioncube это оказалось смертельно ...
Как сделать так чтоб его небыло ?


____________________________
С уважением Max ICQ 71006063




Подробная информация о списке рассылки nginx-ru