![](/img/trans.png)
[英]Nginx redirect all requests from subdirectory to another subdirectory root
[英]NGINX redirect from subdirectory to root with Slim API framework
我想将对子目录 v1 (subdomain.domain.com/v1) 的请求转发到我在 Nginx 中的根目录。 尝试了这个和这个答案(以及更多变体)但没有成功。 我使用 Slim API 框架。
我的 nginx 配置如下所示:
events {
}
http {
include /etc/nginx/mime.types;
server {
listen 80;
server_name subdomain.domain.com;
root /var/www/html;
index index.php;
try_files $uri $uri/ /index.php?$query_string;
location /healthcheck {
auth_basic off;
allow all;
return 200;
}
location / {
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
}
#location ~ \.php {
# only allow index.php to be proxied to FastCGI process (more secure than all php files!)
location /index.php {
proxy_pass http://127.0.0.1:9000;
}
location location ~ ^/v1/(.*) {
return 301 $scheme://$http_host/$1$is_args$query_string;
}
}
}
我的入口 yaml (Kubernetes) 看起来像这样:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
namespace: NAME_OF_NAMESPACE
annotations:
kubernetes.io/ingress.class: gce
kubernetes.io/ingress.global-static-ip-name: ip-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
networking.gke.io/managed-certificates: cert-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
kubernetes.io/ingress.allow-http: "false"
spec:
rules:
- host: NAME_OF_DOMAIN
http:
paths:
- path: /v1/*
backend:
serviceName: svc-ENVIRONMENT_NAME_SHORT-NAME_OF_DEPLOYMENT
servicePort: 443
我只有在没有 /v1(只是 subdomain.domain.com)的情况下才能运行这个东西。 任何指导表示赞赏。
更新(2021 年 6 月):在 SLIM 4 中,这变得非常简单:$app->setBasePath("/index.php/v1");
我认为最好的方法是在入口级别甚至在到达入口之前进行重定向。 但是,GCE 入口还不支持HTTP 到 HTTPS重定向,更不用说任何类型的重定向了。
你拥有它的方式,基本上是这样的:入口收到一个/v1
请求,然后它转到 Nginx 然后它说重定向到/
但是重定向请求返回到入口,它说我不知道该怎么做/
请求。
另一种方法是让您的后端服务于/v1
或使用非常常见的两层方法。 GCE LB(没有入口控制器)➡️ Nginx 入口(进行重定向并具有更丰富的功能集)➡️ 后端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.