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

Правила перезаписи Nginx

Не могли бы вы помочь мне определить следующее перенаправление с помощью Nginx?

Когда пользователь вводит http (s): // (www.) domainA.com/view.php он / она сможет получить доступ к этому файлу view.php (который находится в корне сети)

Все остальные запросы, поступающие на http (s): // (www.) DomainA.com, должны быть перенаправлены на https://learn.domainB.com

(В принципе, перенаправление не должно происходить только для этого файла view.php)

Мой текущий файл vhost Nginx:

server {

    listen 80;
    server_name domainA.com www.domainA.com;

    root /var/www/public_html;

    if ($request_uri !~* (/view.php) ) {
       rewrite ^ https://learn.domainB.com permanent;
    }
    location /view\.php {
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index view.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }
}

Я очень ценю ваш вклад. Спасибо!

Ваша конфигурация должна работать нормально, хотя я бы заменил rewrite на 301 redirect:

if ($request_uri !~* (^/view.php$) ) {
    return 301 https://learn.domainB.com;
}

Если вам нужно передать какие-либо параметры в view.php (лайк view.php?a=b) тогда ваша конфигурация должна выглядеть так:

if ($request_uri !~* (^/view.php(\?.*)?$) ) {
    return 301 https://learn.domainB.com;
}

Я бы предпочел такую ​​конфигурацию:

server {

    listen 80;
    server_name domainA.com www.domainA.com;

    root /var/www/public_html;

    location = /view.php {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index view.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
       return 301 https://learn.domainB.com;
    }
}

Нет необходимости в if , поскольку nginx обрабатывает заказы местоположения от начала до конца и использует первый соответствующий блок местоположения.

Это не помогает с проблемой view.php при загрузке, в файле есть что-то, что препятствует его запуску, как упоминал Анубиоз.

Я также удалил экранирование точки в location = /view.php часть, поскольку это не совпадение с регулярным выражением, и, следовательно, в escape-последовательности нет необходимости.