Я пытаюсь перенаправить подпапку на поддомен в nginx. я хочу http://example.com/~meow/ быть перенаправленным на http://meow.example.com/. Я пробовал следующее:
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
Но не работает. Его ловит мой блок местоположения для пользовательских каталогов:
location ~ ^/~([^/]+)/(.+\.php)$ {
[...]
}
and
location ~ ^/\~([^/]+)/(.*)$ {
[...]
}
Итак, как мне это сделать? О, и я хочу, чтобы перенаправили только / ~ мяу /. Все остальные каталоги пользователей изменять не следует.
Статическое местоположение было бы более эффективным для того, о чем вы просите. Если вы прочтете четыре правила на http://wiki.nginx.org/HttpCoreModule#location , вы увидите, что местоположение ^ ~ не будет заменено местоположением регулярного выражения. Вы также, кажется, хотите убрать начальное / ~ мяу при перенаправлении. Правильный подход:
location ^~ /~meow/ {
rewrite ^/~meow(.*) http://meow.example.com$1 permanent;
}
Кстати, нет причин захватывать весь uri при перезаписи. Текущий uri уже сохранен в $ uri.
rewrite ^(.*)$ http://meow.example.com$1 permanent;
и
rewrite ^ http://meow.example.com$uri permanent;
воля всегда дают тот же результат, а вторая перезапись более эффективна, так как это короткое совпадение и уже содержит то, что вы все равно пытаетесь захватить.
Вы можете попробовать использовать вложенные location
как это
location ~ ^/\~([^/]+)/(.*)$ {
location ~ ^/\~meow/(.*)$ {
rewrite ^(.*)$ http://meow.example.com$1 permanent;
}
[...]
}
Расположение регулярных выражений проверяется в порядке их появления в файле конфигурации, и используется первое положительное совпадение. Значит, ваш location ~ ^/\~meow/(.*)$
должен быть выше двух других мест в файле конфигурации.