将 .htaccess 重写规则移植到 Nginx

将 .htaccess 重写规则移植到 Nginx

我正在从 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;

这是一个安全措施并且应准确读取图示内容。

一旦修复,如果您仍然在浏览器中被重定向,您应该检查您的应用程序。

相关内容