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

Nginx Переписать подпапку в поддомен и сохранить все после нее

Я пытаюсь переписать URL-адрес для обработки следующего сценария: я хочу перенаправить несколько конкретных подпапок на несколько конкретных поддоменов и сохранить все, что было после подпапки.

Пока у меня есть:

location / {
    rewrite ^/sub1/?(.*)$ https://sub1.example.com/$1 permanent;
    rewrite ^/sub2/?(.*)$ https://sub2.example.com/$1 permanent;
    rewrite ^/sub3/?(.*)$ https://sub3.example.com/$1 permanent;
    rewrite ^/sub4/?(.*)$ https://sub4.example.com/$1 permanent;
}

Это обрабатывает example.com/sub1 example.com/sub1/ example.com/sub1/foobar
Но нет example.com/sub1/page.php это идет к example.com/sub1/page.php и 404 потому что его не существует.

я хочу
example.com/sub1 идти в sub1.example.com
example.com/sub1/ идти в sub1.example.com/
example.com/sub1/foobar идти в sub1.example.com/foobar
example.com/sub1/foo/bar/ идти в sub1.example.com/foo/bar/
example.com/sub1/page.php идти в sub1.example.com/page.php

Что мне здесь не хватает? Мое регулярное выражение такое ржавое?

РЕДАКТИРОВАТЬ: Вот моя вся конфигурация для этого сайта, если это проблема с чем-то другим, переопределяющим ее. https://pastebin.com/sEka1Q0e

В одном из ваших server блоки, у вас есть location ~ \.php блок рядом с location блок, содержащий rewrite statements. That regular expressionрасположениеblock takes precedence when evaluating URIs which end with.php`.

Один из вариантов - переместить операторы перезаписи в server блок, в этом случае они будут выполнены перед любой location блок выбран. Например:

server {
    ...

    rewrite ^/sub1/?(.*)$ https://sub1.example.com/$1 permanent;
    rewrite ^/sub2/?(.*)$ https://sub2.example.com/$1 permanent;
    rewrite ^/sub3/?(.*)$ https://sub3.example.com/$1 permanent;
    rewrite ^/sub4/?(.*)$ https://sub4.example.com/$1 permanent;

    location / {
    }

    location ~ \.php$ 
    { 
        ... 
    }
    ...
}

В качестве альтернативы более эффективным решением было бы разместить операторы перезаписи внутри отдельных префиксов, но использовать ^~ модификатор, чтобы дать им более высокий приоритет. Видеть этот документ для подробностей.

location ^~ /sub1 {
    rewrite ^/sub1/?(.*)$ https://sub1.example.com/$1 permanent;
}
location ^~ /sub2 {
    rewrite ^/sub2/?(.*)$ https://sub2.example.com/$1 permanent;
}
location ^~ /sub3 {
    rewrite ^/sub3/?(.*)$ https://sub3.example.com/$1 permanent;
}
location ^~ /sub4 {
    rewrite ^/sub4/?(.*)$ https://sub4.example.com/$1 permanent;
}