@kfuntov

Как «выделить» отдельный location в субдомен?

Есть работающий достаточно большой сайт (много разных настроек в nginx).
Есть задача:
1) Сделать, чтобы при заходе на site.com/forum/* происходил редирект на forum.site.com/forum/*
2) Сделать, чтобы при заходе на forum.site.com/* (где * - что угодно, кроме /forum/*) происходил редирект на site.com/*

Сайт на php, часть настроек (которые на данный момент обрабатывают запросы /forum/*):
server
{
server_name site site.com;
location /
{
    if ( !-f $request_filename) {
        rewrite .* /index.php last;
    }
    root   /sitedir/htdocs;
    index  index.php;
}


location ~ \.php$
{
    gzip on;
    if ( !-f $request_filename) {
        rewrite .* /index.php last;
    }
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_connect_timeout 5;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 8 16k;
    fastcgi_param   DOCUMENT_ROOT   /sitedir/htdocs;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param   PATH_INFO       $fastcgi_script_name;
    include         fastcgi_params;
    open_file_cache off;
}


Попробовал изменить server_name на
~^(?<forum>forum\.)site\.com$
и добавить location:
location ^~ /forum
{
    if ($forum != "forum.") {
        rewrite ^(.*) http://forum.site.com$1 permanent;
    }
    rewrite .* /index.php last;
}

Но это не решило проблему:
Можно зайти на forum.site.com/something/
  • Вопрос задан
  • 2423 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Не нужно пытаться всё запихать в один серверный блок.

server {
    server_name site site.com;
    root /sitedir/htdocs;
    index  index.php;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ^~ /forum/ {
        return 301 http://forum.site.com$request_uri;
    }

    location ~ \.php$ {
        try_files $uri /index.php;
        gzip on;
        fastcgi_pass    127.0.0.1:9000;
        .....
    }
}

server {
    server_name forum.site.com;
    root /sitedir/htdocs;

    location / {
        return 301 http://site.com$request_uri;
    }

    location /forum/ {
        rewrite ^ /index.php break;
        # fastcgi directives;
        .....
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы