Правильный (лучший) способ рерайта 200 URL в NGINX, когда regex не подходит

J
На сайте с 21.08.2011
Offline
78
1528

Друзья, как бы вы поступили, будь у вас такое ТЗ:

Нужно 301-ым редиректом рерайтить примерно 200 штук разнообразных URL на новые.

Регулярка не может быть использована в виду того, что урлы будут совсем разные и без каких-либо общих черт. Пример:

мойсайт.ру/какая-то-страница/ => мойсайт.ру/совсем-другое-название-этой-страницы/

И таких 200 штук!:crazy:

200 строчек рерайтов в блоке server NGINX?

Как оно будет сказываться на производительности?

Или использовать PHP -- функция, которая каждый раз будет пробовать найти урл в массиве со старыми и сопоставленными с ними новыми, и, если находится -- редирект средствами PHP?

Как поступить?

M
На сайте с 30.08.2010
Offline
92
#1

nginx на это сожрет меньше ресурсов, чем php.

Mik Foxi
На сайте с 02.03.2011
Offline
1076
#2

можно сделать на php по схеме:

создаем базу (можно файл) в формате: старый урл|новый урл

если движок не нашел нужную страницу - ищем по графе "старый урл", если нашли - редиректим, если не нашли - отдаем 404 страницу.

Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ + партнерка, до 40$ с продажи.
H
На сайте с 17.03.2014
Offline
1
#3

200 строчек рерайтов действительно не страшно.

нарисовали пачку location-ов и вперёд.

Если есть возможность принимать и редиректить nginx-ом без дальнейшей передачи php и/или backend-у -- надо делать именно им.

Ну а если впадлу писать кучу location-ов, или если их затруднительно генерить автоматически - надо брать nginx perl или nginx lua module.

Но, как по мне, если список из 200 урл есть, он явный и конечный - лучше сгенерить конфиг с нужными location для nginx.

lazyfish
На сайте с 05.01.2014
Offline
13
#4

Да, nginx справится действительно безо всяких проблем; для удобства можно поместить все рерайты в отдельный файл и заинклудить его в нужном месте конфига виртуалхоста.

J
На сайте с 21.08.2011
Offline
78
#5

Всем спасибо -- таки да, буду делать NGINX-ом, к чему, собственно, изначально и склонялся.

Немного не нравится одно -- NGINX будет при каждом запросе к серверу "бегать" по всем локэйшенам и сверять, подходит оно иль нет.

На PHP же можно было сделать, чтобы проверка велась только при отсутствии страницы.

Или я неправ?

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

H
На сайте с 17.03.2014
Offline
1
#6
Jovian:
Всем спасибо -- таки да, буду делать NGINX-ом, к чему, собственно, изначально и склонялся.
Немного не нравится одно -- NGINX будет при каждом запросе к серверу "бегать" по всем локэйшенам и сверять, подходит оно иль нет.
На PHP же можно было сделать, чтобы проверка велась только при отсутствии страницы.
Или я неправ?

по возможности в nginx надо делать точный location, особенно если они все известны.

то есть

location = /xxx.html {

some_stuff_here ;

}

это *очень* быстро.

в php быстрее не будет - надо дёрнуть сам php, дальше php должен сделать какой-то stat() на файл, в зависимости от того, есть он или нет - запустить какую-то логику, передать какой-то header, который потом поедет ещё куда-то дальше.

Это дольше и сложнее.

Берите nginx, а по количеству location не парьтесь вообще :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий