我有一个带有Nginx服务器的Centos,并且wamp中存在多个站点文件夹。
但对于每个项目,我都需要在/etc/nginx/conf.d/websites.conf文件下编写单独的Nginx服务器块。因此,每当我创建一个新项目之后,我必须在Nginx的website.conf文件下添加以下行。
location /project-folder {
root path;
index index.php index.html index.htm;
rewrite ^/project-folder/(.*)$ /project-folder/app/webroot/$1 break;
try_files $uri $uri/ /project-folder/app/webroot/index.php?q=$uri&$args;
location ~ .*\.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:xxxx;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* /project-folder/(.*)\.(css|js|ico|gif|png|jpg|jpeg)$ {
root path/project-folder/app/webroot/;
try_files /$1.$2 =404;
}
}
那么为所有站点文件夹制作公共块是否还有其他方法,并且不需要为新站点添加新的服务器块?
提前致谢。
答案 0 :(得分:0)
有多种方法可以实现这一点。如果您使用多个域名,则可以使用server_name
中的正则表达式创建命名捕获(有关详细信息,请参阅this)。您可以使用location
指令中的正则表达式来捕获项目文件夹的值(有关详细信息,请参阅this document)。
此配置的主要功能是在项目名称和URI的其余部分之间插入文本 / app / webroot 。挑战是在不创建重定向循环的情况下完成。
我测试了以下示例,该示例的工作原理是将rewrite
语句的通用版本放入server
块并捕获项目名称,以便稍后在try_files
中使用}声明:
server {
...
root /path;
index index.php index.html index.htm;
rewrite ^(?<project>/[^/]+)(/.*)$ $1/app/webroot$2;
location / {
try_files $uri $uri/ $project/index.php?q=$uri&$args;
}
location ~ .*\.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:xxxx;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~* \.(css|js|ico|gif|png|jpg|jpeg)$ {
try_files $uri =404;
}
}