gpt4 book ai didi

php - NGINX - 在多个目录中查找 .php 文件,然后执行它

转载 作者:可可西里 更新时间:2023-11-01 00:43:03 26 4
gpt4 key购买 nike

我在多个目录(/jobs/marketing/、/jobs/content/等)中有 .php 文件,需要干净地映射到/jobs/name-of-file.php。

例如点击 url:

/jobs/digital-marketing

需要映射到:

/jobs/marketing/digital-marketing.php 

可以安全地假设每个 php 文件的文件名在目录中是唯一的。

我当前的 nginx 设置如下:

location /jobs {
expires max;
add_header Cache-Control public;
add_header Pragma public;

rewrite ^/jobs[\/]?$ /marketing/jobs.php last;

location ~* ^/jobs/([\-a-z0-9]*)$ {
try_files /marketing/jobs/engineering/$1.php
/marketing/jobs/marketing/$1.php
/marketing/jobs/business-development/$1.php
/marketing/jobs/content/$1.php;
}

location ~ ^/.+\.php($|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
include fastcgi_params;
fastcgi_read_timeout 3000;
}
}

这看起来非常接近,除了下载文件的纯文本版本而不是 nginx 重定向到它。我想我需要以某种方式用另一个位置 block 捕获正确的文件,但我似乎没有任何效果(这甚至可能不是正确的方法)。

关于如何实现这一点有什么想法吗?或者更好的方法?

谢谢。

最佳答案

我相信您使用的 try_files 有点不对。它的作用是

Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context.

您有一个位置为 ~* ^/jobs/([-a-z0-9]*)$ 的上下文,另一个位置为 ~ ^/.+.php($|/)

所以您正在查找文件,但不是通过 PHP 处理它们,因为您的处理是在另一个上下文中进行的。

因此我相信您应该在 try_files 位置添加 php 处理。

location ~* ^/jobs/([\-a-z0-9]*)$ {
try_files /marketing/jobs/engineering/$1.php
/marketing/jobs/marketing/$1.php
/marketing/jobs/business-development/$1.php
/marketing/jobs/content/$1.php;

...
fastcgi_param ...;
fastcgi_pass ...;

}

不要为/jobs 和 .php 位置编写相同的配置,您可以将其剪切到文件并像使用 include fastcgi_params 一样包含;

关于php - NGINX - 在多个目录中查找 .php 文件,然后执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com