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