location

Igor Sysoev igor на sysoev.ru
Ср Июн 30 19:49:47 MSD 2010


On Wed, Jun 30, 2010 at 10:02:46AM -0400, VadimK wrote:

> Есть конфиг, в нем указанно следующее
> [code]
> 	server {
> 		listen 80;
> 		server_name ~^(.*)\.(.*\..*)\.x$;
> 		set $x_document_root w:/www/$1.$2/;
> 		
> 		error_log  logs/error.log  debug;
> 		access_log logs/access.log  main;		
> 		index	index.php index.html;
> 
> 		location ~ ^/asm/(.*\.php)$ {
> 	            fastcgi_pass   127.0.0.1:521;
> 	            fastcgi_param  SCRIPT_FILENAME 
> w:/www/core/$fastcgi_script_name;
> 	            include        fastcgi_params;
> 	            fastcgi_param DOCUMENT_ROOT $x_document_root;
> 		}
> 		
> 		location ~ ^/asm/ {
> 			alias w:/www/core/asm/;
> 		}		
> 		
>         location ~ \.php$ {
>             fastcgi_pass   127.0.0.1:521;
>             fastcgi_index  index.php;
>             fastcgi_param  SCRIPT_FILENAME 
> $x_document_root$fastcgi_script_name;
>             include        fastcgi_params;
>         }
> 	}
> [/code]
> 
> Т.е. по правилам, если я запрашиваю
> /asm/js/jquery/jquery.tablednd.js , то должна
> выполниться часть 
> [code]
> 		location ~ ^/asm/ {
> 			alias w:/www/core/asm/;
> 		}
> [/code]
> Оно в общем так и происходит, но всегда
> теряется первый символ в адресе
> запрашиваемой страницы. 

Потому что nginx заменяет первые 6 символов (длина "^/asm/") в запросе
на "w:/www/core/asm/". Правильно так:

	location ~ ^/asm/ {
		root w:/www/core;
	}

Кроме того,
	set $x_document_root w:/www/$1.$2/;
не нужно:

	server_name ~^(?<F>.*)\.(?<S>.*\..*)\.x$;
	root      w:/www/$F.$S/;

	location ~ ^/asm/(.*\.php)$ {
            ...
            fastcgi_param DOCUMENT_ROOT $document_root;
	}


-- 
Игорь Сысоев
http://sysoev.ru



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