Nginx: переписать для субдомена в папку и файлы внутри него

У меня есть правило перезаписи 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 и получает данные в SUB из домена ROOT — это неправильно.
Пожалуйста, помогите мне добавить исключения nginx или добавить правило для получения данных txt в SUB от SUB. Not_from_root_domain. Благодарю.

3

Решение

Вы должны добавить дополнительные места для обработки файлов 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;
}
}

структура dir:

/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
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector