REQUEST_URI htaccess nginx

REQUEST_URI htaccess nginx

htaccess 到 nginx 重寫轉換幫助

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

我想當參觀 uri GEThttp://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://winnginx.com/en/htaccess像這樣:

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

但是當我訪問時http://localhost/hospital_project/apiv01/listHospital/3211輸出等於http://localhost/hospital_project/apiv01(沒有效果)

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

---我也使用編輯

位置 /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 中使用重寫

答案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 中使用重寫

相關內容