Здравствуйте
если cделать внутри perl_module один regexp, потом использовать
результат $1 (именно без кавычек), а затем второй регексп, то или
просто теряются переменные или вылазит мусор в переменных.
если заменить $1 на "$1", то всё работает нормально.
не знаю баг это или особенность.
более подробно:
---
http {
include mime.types;
default_type text/html;
perl_modules /usr/local/nginx/perl;
perl_require /usr/local/nginx/conf/test.pm;
perl_set $test test::simple;
server {
server_name 127.0.0.1;
listen 127.0.0.1:202;
root /home2/;
location / {
add_header test_result $test;
}
}
}
---
package test;
use nginx;
sub simple {
my $r=shift;
my $uri=$r->uri;
if($uri=~/(...)(...)/){
$r->header_out("test_s1",$1);
$r->header_out("test_s2",$2);
}
if($uri=~/(..)(..)/){
$r->header_out("test_s3",$1);
$r->header_out("test_s4",$2);
}
return 1;
}
1;
__END__
---
в таком варианте получается:
---
$ wget -S http://127.0.0.1:202/1234test.html
--07:18:08-- http://127.0.0.1:202/1234test.html
=> `1234test.html'
Connecting to 127.0.0.1:202... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: nginx/0.6.17
Date: Thu, 29 Nov 2007 07:18:08 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Thu, 29 Nov 2007 07:12:17 GMT
Connection: keep-alive
test_s1: /1
Length: 2 [text/html]
...
---
т.е. просто НЕ добавила хеадеры, если трогать регулярные
выражения, то могут появиться переменные и мусор в них.
если поменять $1 на "$1" и соответственно $2 на "$2", то:
---
$ wget -S http://127.0.0.1:202/1234test.html
--07:20:55-- http://127.0.0.1:202/1234test.html
=> `1234test.html'
Connecting to 127.0.0.1:202... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: nginx/0.6.17
Date: Thu, 29 Nov 2007 07:20:55 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Thu, 29 Nov 2007 07:12:17 GMT
Connection: keep-alive
test_s1: /12
test_s2: 34t
test_s3: /1
test_s4: 23
test_result: 1
Accept-Ranges: bytes
Length: 2 [text/html]
---
т.е. как надо.
--
С уважением,
Domrachev mailto:Domrachev.Ivan@xxxxxxxxx