如果 uri 的第一部分不是文件,则 nginx mod_redirect

如果 uri 的第一部分不是文件,则 nginx mod_redirect

我正在从 Apache 迁移到 Nginx 服务器,并尝试弄清楚如何用.htaccessnginx 配置替换我的配置。

在我的重写中,我想启用漂亮的链接,并且需要服务器检查第一部分是否不是文件,然后重定向到,index.php否则重定向到该文件。

例子:

我在根目录中有两个 PHP 文件:index.phpfiles.php

https://example.com/token/login ---> index.php/token/login
https://example.com/index.php/token/login ---> index.php/token/login //same as above

https://example.com/files.php/token/login ---> files.php/token/login

我当前的 /default 文件是

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name vpn.simpleinformatics.com www.vpn.simpleinformatics.com;
    return 301 https://$server_name$request_uri;
}
server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-vpn.simpleinformatics.com.conf;
    include snippets/ssl-params.conf;

    root /var/www/html;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name vpn.simpleinformatics.com;

    location / {
        # try_files $uri $uri/ =404;
        # try_files $uri $uri/ /index.php;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
    location ~ /.well-known {
            allow all;
    }
    location /phpmyadmin {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }
}

这会将所有请求重定向到index.php,甚至files.php/etc..请求 :(。

那么我如何告诉 nginx 检查 URI 的第一部分是否是文件,然后重定向到该文件。

相关内容