Nginx:将子域重写为其中的文件夹和文件

时间:2018-12-18 16:57:45

标签: php nginx subdomain rules

我有nginx重写规则-它将所有子域请求从子目录重定向到文件夹:

server {
listen      x.x.x.x:80;
server_name domain *.domain;

root /home/admin/web/domain/public_html/subs/$subdomain;    # here is IF for subdomains
set $subdomain "";
if ($host ~* ^([a-z0-9-\.]+)\.domain$) {
    set $subdomain $1;
}
if ($host ~* ^www.domain$) {
    set $subdomain "";
}


index       index.php;


location / {    # here is rules for ROOT domain

root        /home/admin/web/domain/public_html;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
        expires     max;
    }

........

它工作正常,但是我有一个问题。

在域和子域中,我有一个相同的php脚本,可从txt文件获取数据,如下所示:

file(key.txt);

我认为我的php-fpm模块不了解nginx规则,并从ROOT域中获取SUB中的数据-这是错误的。 请帮助我添加nginx异常或添加规则以从SUB获取SUB中txt的数据。 Not_from_root_domain。谢谢。

1 个答案:

答案 0 :(得分:2)

您应该添加其他位置来处理php文件。为了简化规则,我将根目录移到了/tmp/subs/root子目录中。

server {
    listen 80;
    server_name domain.test *.domain.test;

    set $subdomain "root";
    if ($host ~* ^([a-z0-9-\.]+)\.domain.test$) {
        set $subdomain $1;
    }
    if ($host ~* ^www.domain.test$) {
        set $subdomain "root";
    }

    root /tmp/subs/$subdomain;

    location / {
        index    index.php;

         if (!-e $request_filename) {
             rewrite ^(.*)$ /index.php last;
             break;
         }
    }

    location ~ /(.+\.php) {
        index index.php;

        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO        $fastcgi_script_name;
        include fastcgi_params;
    }
}

目录结构:

/tmp/subs/root/index.php
/tmp/subs/d1/index.php
/tmp/subs/d2/index.php
/tmp/subs/d2/key.txt

/tmp/subs/d2/index.php:

<?php
    $file = file('key.txt');
    print_r($file);

/tmp/subs/d2/key.txt

hello there