我正在从 Apache 迁移到 Nginx,并且想从我的 htaccess 文件中“移植”一条规则:
RewriteRule ^api/(.*) slim/index.php [QSA,L]
我如何在 Nginx 中执行此操作?
需要重写的 request-url 示例: http://我的应用程序.开发:8001/api/user/1
当前行为:我当前的 Nginx 服务器块将上述请求 URL 更改(在我的浏览器地址栏中)为: http://my-app.development/slim/index.php/api/user/1
期望的行为:
- 不要(明显地)更改请求 URL
- 使用 slim/index.php 文件而不是 index.php 来处理(api)请求
当前 Nginx 服务器块:
server {
listen 8001;
server_name my-app.development;
root /var/www;
index index.php index.html;
access_log /var/log/nginx/my-app.access.log;
error_log /var/log/nginx/my-app.error.log;
client_max_body_size 10M;
location /api {
rewrite ^/api/(.*) /slim/index.php last;
}
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass my-app:9000;
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
答案1
最有可能的问题是非常奇怪的
try_files $uri $uri/;
在你的location ~ \.php$
街区。
这将导致索引处理运行,这意味着对于不对应于静态文件的 URL,nginx 将启动新的请求index.php
。这可能不会达到您想要的效果。
这应该读:
try_files $uri =404;
这是一个安全措施并且应准确读取图示内容。
一旦修复,如果您仍然在浏览器中被重定向,您应该检查您的应用程序。