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

nginx: перенаправить подпапку на поддомен

Я пытаюсь перенаправить подпапку на поддомен в 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/(.*)$ должен быть выше двух других мест в файле конфигурации.