try_files acting weird, maybe affected by IF ?
HosipLan
nginx-forum at nginx.us
Sat Jun 16 16:08:35 UTC 2012
Hi,
I've been trying to force nginx to dynamically handle hosts. This is my
configuration file
server {
listen 127.0.0.1:80;
server_name
~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$;
index index.php index.html;
location / {
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}
root /var/www/hosts/$try_dir;
try_files $uri $uri/ /index.php;
}
# pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
location ~ \.php$ {
set $try_dir $domain;
if (-d /var/www/hosts/$second.$domain) {
set $try_dir $second.$domain;
}
root /var/www/hosts/$try_dir;
include fastcgi_params;
fastcgi_param SERVER_NAME $try_dir;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED
$document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
try_files $uri =404;
}
}
It receives request, checks if exists corresponding subdirectory, if
not, passes to "main" directory.
I know I shouldn't be using the IF statement, but I've tried many, but
havent figured this out without the if.
So let's have a request
$ curl http://hosiplan.l/rewrite
The directory /var/www/hosts/hosiplan.l exists, there is index.php file
and no "rewrite" file. This should be handled by the index.php
...
[debug]: *1 using configuration "/"
...
[debug]: *1 http script file op 0000000000000002
"/var/www/hosts/.hosiplan.l"
[debug]: *1 http script file op false
[debug]: *1 http script if
[debug]: *1 http script if: false
...
[debug]: *1 try files phase: 11
...
[debug]: *1 try to use file: "/rewrite"
"/var/www/hosts/hohosiplan.l/rewrite"
...
[debug]: *1 try to use dir: "/rewrite"
"/var/www/hosts/hohosiplan.l/rewrite"
...
[debug]: *1 try to use file: "/index.php"
"/var/www/hosts/hohosiplan.l/index.php"
[debug]: *1 internal redirect: "/index.php?"
...
This works like a charm. Pure perfection. But when I use a subdomain
$ curl http://blaphp.hosiplan.l/rewrite
The directory /var/www/hosts/blaphp.hosiplan.l exists, there is
index.php file and no "rewrite" file. This should be handled by the
index.php
...
[debug]: *3 using configuration "/"
...
[debug]: *3 http script file op 0000000000000002
"/var/www/hosts/blaphp.hosiplan.l"
[debug]: *3 http script if
...
[debug]: *3 try files phase: 11
...
[debug]: *3 http filename:
"/var/www/hosts/blaphp.hosiplan.l/rewrite"
2012/06/16 17:05:45 [error] 2604#0: *3 open()
"/var/www/hosts/blaphp.hosiplan.l/rewrite" failed (2: No such file or
directory), client: 127.0.0.1, server:
~^(:?(?<second>.+)\.)?(?<domain>[^.]+\.[^.]+)$, request: "GET /rewrite
HTTP/1.1", host: "blaphp.hosiplan.l"
And that's where I'm stuck. Any kind of input would be really
appreciated.
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,227602,227602#msg-227602
More information about the nginx
mailing list