Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx$document\u root未计算root指令regex_Nginx - Fatal编程技术网

nginx$document\u root未计算root指令regex

nginx$document\u root未计算root指令regex,nginx,Nginx,我的目标是拥有通配符子域,每个子域从自己的目录为php提供服务。例如,“www”子域从“public_html/www”提供服务,“blog”从“public_html/blog”提供服务。下面是我当前的nginx配置,允许部分工作: server { listen 80; server_name ~^(.*)\.example\.com$; root /var/www/example.com/public_html/$1; index

我的目标是拥有通配符子域,每个子域从自己的目录为php提供服务。例如,“www”子域从“public_html/www”提供服务,“blog”从“public_html/blog”提供服务。下面是我当前的nginx配置,允许部分工作:

server {
    listen      80;
    server_name ~^(.*)\.example\.com$;

    root        /var/www/example.com/public_html/$1;
    index       index.php index.htm;

    location ~ \.php$ {
        fastcgi_split_path_info         ^(.+\.php)(/.+)$;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}
为了测试,我在www目录中有一个index.php,在blog目录中有一个index.htm。博客子域工作正常,并显示博客目录中的index.htm

但是,www子域不起作用,页面返回“未指定输入文件”。如果我将“www”硬编码到root指令中而不是“$1”,则它适用于“www”子域,但当然,博客也会显示该内容


因此,php特定位置中的$document_root似乎没有计算表示子域的root指令的$1。使用$document\u root时需要更改什么或如何确保计算根?

尝试使用命名捕获而不是数字捕获

server_name ~^(?<subsystem>.+)\.example\.com$;
root        /var/www/example.com/public_html/$subsystem;
server\u name~ ^(?.+)\.example\.com$;
root/var/www/example.com/public_html/$subsystem;

可能
root
计算得太晚(我不知道),并且
$1
位置
正则表达式覆盖。

看起来是这样的!稍后我将继续进行进一步的测试,但就目前而言,仅此更改就消除了错误并显示了我的内容。谢谢