请求URI htaccess nginx

请求URI htaccess nginx

htaccess 到 nginx 重写转换帮助

RewriteEngine On
RewriteCond %{REQUEST_URI} apiv01
RewriteRule ^(.*)$ api.php?params=$1 [NC]

我希望访问 uri 时http://localhost/hospital_project/apiv01/listHospital/3211可以显示

    {"header":{"code":"401","message":"wrong token"}}

我使用了 anilcetin 的配置,如下:

location /hospital_project {
if ($uri ~ "apiv01"){
        set $rule_0 1$rule_0;
        }
if ($rule_0 = "1"){
        rewrite ^/(.*)$ /hospital_project/api.php?params=$1;
        }

}

我也使用了配置https://winginx.com/en/htaccess像这样:

location /hospital_project {
  rewrite apiv01 /hospital_project/api.php?params=$1;
}

但是当我访问http://localhost/hospital_project/apiv01/listHospital/3211输出等于http://本地主机/hospital_project/apiv01(没有效果)

正常如果我使用http://localhost/hospital_project/api.php?params=apiv01/listHospital/3211

---编辑我也使用

location /hospital_project/apiv01 { try_files $uri $uri/ /hospital_project/api.php?params=$request_uri; } 但也没有效果

这个问题可以通过使用 apache2 的反向代理来解决

location /hospital_project {

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8888;
}

但我仍然好奇是否在 nginx 中使用 rewrite

答案1

nginx 以比 Apache 更简单、更有效的方式实现前端控制器模式。对于您的情况,nginx 方式如下所示:

location ~ ^/(hospital_project/apiv01.+)$ {
    try_files $uri $uri/ /hospital_project/api.php?params=$1;
}

您只需将此位置添加到 nginx 配置的顶部。您根本不需要使用if或指令。rewrite

答案2

对不起,我的意思是我用;

location /hospital_project/ {
  rewrite apiv01 /hospital_project/api.php?params=$1;
}

但没有效果

我也用

location /hospital_project/apiv01 {
    try_files $uri $uri/ /hospital_project/api.php?params=$request_uri;
}

但也没有效果

这个问题可以通过使用 apache2 的反向代理来解决

    location /hospital_project {

    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8888;
    }

但我仍然好奇是否在 nginx 中使用 rewrite

相关内容