gpt4 book ai didi

php - 如何在 Nginx 的重写规则中包含所有的 php 文件?

转载 作者:可可西里 更新时间:2023-11-01 00:54:17 24 4
gpt4 key购买 nike

我想做的是允许以下任何一项工作:

site.mydomain.com/{id}?args (defaults to index.php)

site.mydomain.com/{id}/{any file if exists}?args (could be calendar.php, upload.php, etc. If not it will 404)

我的 Nginx 配置如下:

server {
listen 80;

large_client_header_buffers 4 32k;

server_name site.mydomain.com;

root /var/www/php/my_site/public;

index index.php;

access_log /var/log/sites/my_site.access.log;
error_log /var/log/sites/my_site.error.log error;

location / {
rewrite ^/([0-9]+)/?$ /index.php?s=$1$is_args$args last;
include /etc/nginx/conf.d/php.inc;
}

location ~ /\.ht {
deny all;
}
}

这是我的 php.inc,我将其包含在我的位置,因此它实际上会执行 php 而不是下载它:

location ~ \.php$ {
include snippets/fastcgi-php.conf;

fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

当我转到 site.mydomain.com/{id} 时它有效

如果我在它的末尾附加 /index.php,我会收到 404 错误,或任何其他 php 文件。

由于旧应用程序的向后兼容性,我需要 index.php(和其他文件)。

我已经尝试了几个围绕 SO 和谷歌搜索的配置选项,但我似乎无法让它工作。我是 nginx 的新手,所以我有点不知所措。

如果有帮助,这是我的目录结构:

/var/www/php/my_site
/application
/library
/public
/static
/styles
/javascript

编辑

我尝试使用建议的答案:

rewrite ^/([0-9]+)(/|/index.php)?$ /index.php?s=$1 break;

它做同样的事情。我已经更新了我的问题,使其比以前更具体。

最佳答案

可能的解决方案:

location / {
}

location ~ /\.ht {
deny all;
}

location ~ ^/([0-9]+)($|/) {
rewrite ^/([0-9]+)/?$ /index.php?s=$1 last;
rewrite ^/([0-9]+)/(.*)\.php$ /$2.php?s=$1 last;
rewrite ^/([0-9]+)/(.*)$ /$2 last;
}

location ~ \.php$ {
try_files $uri =404;
...
}

最后三个 location block 的顺序很重要。

include/etc/nginx/conf.d/php.inc; 已移出 location/ block 并插入到末尾,因此它提供顶级 location ~\.php$ block 而不是嵌套位置 block 。 我在上面的示例中显示了包含文件的内容,但是您的 include 语句将完全相同。

location ~ ^/([0-9]+)($|/) block 处理任何以 /{id} 部分开头的 URI。 rewrite 自动将原始查询字符串附加到重写的 URI。参见 this document了解详情。

您应该在 location ~\.php$ block 中包含 try_files 语句以避免发送 uncontrolled requests to PHP如果 PHP 文件不存在,则返回 404 响应。

关于php - 如何在 Nginx 的重写规则中包含所有的 php 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54657749/

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