我有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。谢谢。
答案 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