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

Правило перезаписи имени сервера Nginx

Если я хочу создать правило перезаписи на nginx:
Посетите http: //*1.abc.com
* = любой одиночный символ
301 перенаправит http // * 9.abc.com
поэтому я создал следующую конфигурацию:

server {
   listen 80 ;
   server_name ~^(.+?)1\.abc\.com$;
   rewrite ^/(.*) http://$19.abc.com permanent;
}

URL-адрес будет изменен на: http // 9.abc.com
Любая идея?

У вас есть числовой захват в server_name оператор и числовой захват в rewrite заявление.

Переменная $1 в rewrite оператор представляет значение числового захвата из регулярного выражения в том же rewrite заявление.

Это всегда тот случай, когда числовые снимки перезаписываются последний регулярное выражение для оценки.

Вы можете использовать именованные захваты, где одно или несколько регулярных выражений могут оцениваться между захватом и тем, где оценивается значение. Видеть этот документ для подробностей.

Например:

server_name ~^(?<prefix>.+?)1\.example\.com$;
rewrite ^ "http://${prefix}9.example.com" permanent;

Или вы можете избежать каких-либо промежуточных регулярных выражений, используя return заявление, например:

server_name ~^(.+?)1\.example\.com$;
return 301 "http://${1}9.example.com$is_args$args";

Я предпочитаю использовать ${1} скорее, чем $1 где намерение может быть неоднозначным. В этом случае выражения также необходимо будет заключить в кавычки. В $is_args$args добавляет необязательную строку запроса, которая соответствует поведению исходного rewrite заявление.