我想重写 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