![](/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.