Nginx 重定向到特定的 PHP

Nginx 重定向到特定的 PHP

我想重写 URL 路径以指向某个 PHP。流程如下:

用户登录

https://admin.abc.com

登录后,系统将传递要重定向的 url

https://admin.abc.com/MX/Home

它在这里所做的实际上是重定向到main.php?url=Home,所以我希望 URL 重写能够重写为上面的内容。

MX/Home 的物理路径不存在,但指向 MX 的路径存在。此 main.php 位于 MX 文件夹中,路径如下:

/var/www/html/MX/main.php

因此登录后,它应该重定向到 main.php 并将 URL 重写为如下形式

https://admin.abc.com/MX/Home

但实际上是 main.php 根据url参数运行。以下是我的配置,但似乎无法实现上述功能。请指教。

server {
    listen 80;

    root /var/www/html;
    index login.php;
    server_name  admin.abc.com;

    location / {
        try_files $uri $uri/ login.php?$args;
    }

    location ^/MX {
      rewrite ^/MX/^(.*)$ /MX/main.php?url=$1 last;
    }

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

答案1

location ^/MX { ... }位于location ~ \.php$ { ... }块上方,这意味着 URI/MX/main.php将不会被处理为 PHP 文件。事实上,您可能会得到一个重定向循环。请参阅这个文件了解更多信息。

交换块的顺序location,或者使用前缀位置而不是正则表达式位置。

例如:

location /MX {
    rewrite ^/MX/?(.*)$ /MX/main.php?url=$1 last;
}

上述位置将处理以 开头的 URI /MX,但不处理以 结尾的 URI 。另外,您的正则表达式.php中有一个拼写错误。rewrite

相关内容