Назад | Перейти на главную страницу

nginx rewrite filename удалить часть имени

Кажется, я не могу понять эту перезапись URL-адреса nginx.

Это то что мне нужно

URL-адрес выглядит так:

/управляющий делами/

/ менеджер / панель управления

/ менеджер / сеанс

/ менеджер / просмотр

Они отображаются в следующем порядке:

/manager/index__cms.php

/manager/index__cms.php

/manager/dashboard__cms.php

/manager/session__cms.php

/manager/view__cms.php

ТАКЖЕ:

/ manager / js / module - сопоставить с - /manager/js/module_js.php

/ manager / js / index - сопоставить с - /manager/js/index_js.php

Я бы переименовал файлы, но предыдущий программист все обозначил, используя эти сопоставления URL-адресов. И программа раньше была на apache, теперь nginx.

В настоящее время у меня есть:

location /manager {
index index__cms.php;
rewrite ^(.*)\__cms.php break;
}

РЕШЕНИЕ:

Я сделал следующее. Это некрасиво, но работает.

location /manager {index index__cms.php; try_files $uri $uri/ /manager/index__cms.php$is_args$args;}
location /manager/dashboard {try_files $uri $uri/ /manager/index__cms.php$is_args$args;}
location /manager/session {try_files $uri $uri/ /manager/session__cms.php$is_args$args;}

Было 20 каких-то странных файлов, и это было проще, чем создание динамического метода. Код, которому это необходимо, в ближайшем будущем будет удален, поэтому он не должен быть красивым, поскольку он будет удален вместе с поддерживающей его конфигурацией.

Что-то вроде этого может сработать:

map $uri $remapped_uri {
    default                 $uri;
    ~^/manager/([^/]+)$     /manager/$1__cms.php;
    ~^/manager/js/([^/]+)$  /manager/js/$1_js.php;
}

server {
    ...
    location /manager/ {
        index index__cms.php;
        rewrite .* $remapped_uri last;
    }
}

Но правильно ли этот запрос на yourdomain.com/manager/js/ будет идти к yourdomain.com/manager/js/index__cms.php? Если это не так, исправьте индексный файл для yourdomain.com/manager/js/ является index_js.php, вот еще один пример:

map $uri $remapped_uri {
    default                 $uri;
    /manager/               /manager/index__cms.php;
    ~^/manager/([^/]+)$     /manager/$1__cms.php;
    /manager/js/            /manager/js/index_js.php;
    ~^/manager/js/([^/]+)$  /manager/js/$1_js.php;
}

server {
    ...
    location /manager/ {
        rewrite .* $remapped_uri last;
    }
}

Служить /manager, /manager/js так как /manager/, /manager/js/:

map $uri $remapped_uri {
    default                 $uri;
    ~^/manager/?$           /manager/index__cms.php;
    ~^/manager/([^/]+)$     /manager/$1__cms.php;
    ~^/manager/js/?$        /manager/js/index_js.php;
    ~^/manager/js/([^/]+)$  /manager/js/$1_js.php;
}

server {
    ...
    location /manager {
        rewrite .* $remapped_uri last;
    }
}

Смотрите также этот ответ.