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