Не могли бы вы помочь мне определить следующее перенаправление с помощью 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-последовательности нет необходимости.