gpt4 book ai didi

php - 静态和 PHP 文件的 NGINX 配置

转载 作者:搜寻专家 更新时间:2023-10-31 21:03:47 26 4
gpt4 key购买 nike

我正在尝试配置 nginx 以提供静态文件和 PHP 文件。我的配置不起作用。我想要以下本地文件夹结构:

src/static/  -> contains HTML, CSS, JS, images etc
src/api/ -> contains PHP files for a small REST service

如果我访问http://mysite.local我想从/static 文件夹中获取文件。如果我访问 http://mysite.local/api我想获得 API PHP 文件。我希望重新编写对 api 的请求并将其发送到 index.php 文件。

一些例子:

http://mysite.local/test.html                   -> served from src/static/test.html
http://mysite.local/images/something.png -> served from src/static/images/something.png
http://mysite.local/css/style.css -> served from src/static/css/style.css

http://mysite.local/api/users -> served from src/api/index.php?users
http://mysite.local/api/users/bob -> served from src/api/index.php?users/bob
http://mysite.local/api/biscuits/chocolate/10 -> served from src/api/index.php?biscuits/chocolate/10

以下配置适用于静态文件但不适用于 api 文件。如果我访问其中一个 API 路径,我会返回 404 错误。

server {
listen 80;
server_name mysite.local;
access_log /var/log/nginx/mysite.access.log main;
error_log /var/log/nginx/mysite.error.log debug;


location / {
index index.html;
root /var/www/mysite/src/static;
try_files $uri $uri/ =404;
}

location /api {
index index.php;
root /var/www/mysite/src/api;
try_files $uri $uri/ /index.php?$query_string;

location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}

最佳答案

最初的问题是 location/api block 中的 root 指令,它不应该包含位置组件,因为它作为 URI 的一部分附加,因此:

location /api {
root /var/www/mysite/src;
...
}

当与 URI /api/index.php 一起出现时,将导致 /var/www/mysite/src/api/index.php 的本地路径。参见 this document了解详情。

try_files 规则不会重写您在示例中指定的 URI。如果您确实需要将 URI 的最终路径显示为 /api/index.php 的查询字符串,您将需要使用 rewrite

最简单的解决方案(如果您不需要从该位置提供静态内容)是将您的 try_files 替换为:

location /api {
...
rewrite ^/api/(.*)$ /api/index.php?$1 last;

location ~ \.php$ { ... }
}

否则,使用命名位置:

location /api {
...
try_files $uri $uri/ @rewrite;

location ~ \.php$ { ... }
}
location @rewrite {
rewrite ^/api/(.*)$ /api/index.php?$1 last;
}

参见 thisthis了解详情。

关于php - 静态和 PHP 文件的 NGINX 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155690/

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