Я пытаюсь переписать 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;
}