Я хотел переписать 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;
}
}
В location ^/MX { ... }
блок размещается над location ~ \.php$ { ... }
блок, который означает, что URI /MX/main.php
не будет обрабатываться как файл PHP. Фактически, вы, вероятно, получите петлю перенаправления. Видеть этот документ для большего.
Либо поменяйте местами порядок location
блоков или используйте расположение префикса вместо расположения регулярного выражения.
Например:
location /MX {
rewrite ^/MX/?(.*)$ /MX/main.php?url=$1 last;
}
В указанном выше месте будут обрабатываться URI, начинающиеся с /MX
, но не те, которые заканчиваются на .php
. Кроме того, в вашем rewrite
регулярное выражение.