我需要一些有关 nginx 文件夹别名的帮助
我有我的文件夹 www/,其中包含我的网站 example.com 的容器以及许多文件夹,例如 client0、client1、client2...我不应该修改 www/example/,但我需要将 example.com/serveur0/ 重定向到 www/client0/
我制定了这样的 nginx 规则:
location /serveur0/ {
alias /www/client0/;
index index.php
location ~ /serveur0/(.*\.php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$1;
include /etc/nginx/fastcgi_params;
}
}
并且运行完美。但是当我尝试使用正则表达式将其概括时,我遇到了一些问题。我试过这个
location /serveur([0-9]+)$/ {
alias /www/client$1/;
index index.php
location ~ /serveur$1/(.*\.php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$1;
include /etc/nginx/fastcgi_params;
}
}
但它不起作用,我不明白为什么。你能帮助我吗?
答案1
在第一个location
区块:
您忘记指定前缀
~
(或~*
)来使用正则表达式。$
删除尾部斜杠前的美元符号 ( )。
位置 ~ /server([0-9]+)/ { 别名/www/client$1/; 索引 index.php 位置 ~ \.php$ { fastcgi_pass 127.0.0.1:9000; 包括 fastcgi.conf; fastcgi_intercept_errors开启; 错误页面 404 /error/404.php; } }
答案2
以下是配置的修订版本,其中包含一些改进:
location ~* ^/serveur([0-9]+)/(.*)$ {
alias /www/client$1/$2;
try_files $uri $uri/ /index.php;
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
}
}
以下是我所做的更改:
- 我修改了 location 指令中的正则表达式,使其使用 ~* 修饰符,这样匹配就不区分大小写。这样您就可以以相同的方式处理 /serveurX/ 和 /serveurx/ 的请求。
- 我添加了 try_files 指令来处理与目录中的文件不匹配的请求。在这种情况下,它将返回到 /index.php 文件。
- 我改变了 fastcgi_param 指令,将 SCRIPT_FILENAME 环境变量设置为 $request_filename,这是请求文件的绝对文件路径。
- 我使用 ~* 修饰符将嵌套位置块中的正则表达式更改为匹配 .php 文件,这使得匹配不区分大小写。
此配置应按预期工作,处理 /serveurX/ URL 的请求,将 PHP 文件的请求传递给 FastCGI 服务器进行处理,并在未找到请求的文件时提供默认的 index.php 文件。