У меня есть правило перезаписи 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. Благодарю.
Вы должны добавить дополнительные места для обработки файлов 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
Других решений пока нет …