我有一个服务器块来执行 PHP 文件:
server {
index index.php
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
include fastcgi_params;
}
## ... etc
}
我希望子文件夹执行自己的 index.php 文件,并将docs
子文件夹路径下的任何内容(不带扩展名)重定向到 docs 文件夹内的 index.php,其余参数通过查询字符串传入,而不会影响根 index.php 文件的相同进程……哇,我解释得很糟糕。这里:
mysite.com/docs/introduction/getting-started
会成为mysite.com/docs/?path=introduction/getting-started
mysite.com/foo/bar/
会成为mysite.com/?path=foo/bar/
但
mysite.com/docs/introduction/getting-started/screenshot.jpg
将提供该文件(因为它有一个扩展名)。
因此,对于给定的子文件夹,我希望有自己的 index.php 处理器来处理其余参数,如果这有意义的话。我试过
location /docs {
try_files $uri $uri/ /docs/index.php$query_string;
}
如果有一个查询字符串值,而该值不存在,那么这很好 - 只有/docs/folder/subfolder/subsubfolder/etc
。我可以看到它需要一个包含 (.*) 的表达式,但我尽力尝试,却无法使其工作。
我该怎么做呢?