#1 2013.11.09 17:51

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Как сделать переадресацию по условию в конфиге nginx?

У меня сменилась структура сайта и все ссылки надо переправлять на другой адрес с кодом 301 Moved Permanently
бывший адрес /view/id.html текущий /y/id.html
Добавлено спустя   2 минуты  23 секунды:
Да и еще если не сложно дайте пример реврайта на с /y/ID.html на /yfile/view.php?id=ID

Неактивен

#2 2013.11.09 19:54

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6538
Карма: 108
Профиль Веб-сайт

Re: Как сделать переадресацию по условию в конфиге nginx?

Код:

1
2
rewrite ^/view/(.+)\.html$ /y/$1.html permanent;
rewrite ^/y/(.+)\.html$ /yfile/view.php?id=$1 permanent;

если я правильно тебя понял

Неактивен

#3 2013.11.12 02:35

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

Я тоже так делал. Просто парился с location тулит туда регулярку.
Сделал просто location /view/ {
rewrite...
}

Неактивен

#4 2013.11.22 01:06

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

Выручай, опять изменилась структура сайта. А поисковики уже успели сожрать кучу линков.
Надо перекидать юзеров на адрес типо такого /y/(id).html сейчас все линки идут на /y/v?(id)
Вот мой конфиг:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
server {
server_name test.v-s.mobi test.video-saver.mobi *.test.v-s.mobi *.test.video-saver.mobi;
listen 188.93.18.106:80;
##access_log /home/www/log/video-saver_mobi_access.log;
error_log /home/www/log/test.video-saver_mobi_error.log;
charset utf-8;
client_max_body_size 1m;
root /home/www/test.video-saver.mobi;
index index.php;
location /v/ {
if ($host ~* "^down\.(.*)$") {
rewrite ^(.*)$ /vkontakte/download.php last;
}
}
error_page 404 /404.php;
location ~ /(DATA|SYSTEM|TMPFS)/(.*?)$ {
deny all;
return 404;
}
location ~ \.(dat|conf)$ {
deny all;
return 404;
}
location /view/ {
rewrite ^/view/([a-zA-Z0-9\-_]+?)\.html.*$ /y/v?$1 permanent;
}
location /y/v {
rewrite ^/y/v(.*)$ /youtube/videoView.php$1 last;
}
location /y/s {
rewrite ^/y/s(.*)$ /youtube/videoSearch.php$1 last;
}
location /y/i {
rewrite ^/y/i(.*)$ /youtube/image.php$1 last;
}
location /v/s {
rewrite ^/v/s(.*)$ /vkontakte/videoSearch.php$1 last;
}
location /v/v {
rewrite ^/v/v(.*)$ /vkontakte/videoView.php$1 last;
}
location ~ /(DATA|SYSTEM|TMPFS)/(.*?)$ {
deny all;
return 404;
}
location ~ \.php$ {
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
 
location ~ /\.ht {
deny all;
return 404;
}
}

Пытался сделать что то вроде этого

Код:

1
2
3
4
location /y {
rewrite ^/y/v?([a-zA-Z0-9\-_]+)$ /y/$1.html permanent;
rewrite ^/y/([a-zA-Z0-9\-_]+)\.html.*?$ /youtube/videoView.php?$1 last;
}

Вроде норм при переходе по адресу /y/(id).html
Но при переходе по адресу /y/v?(id) кидает на /y/v.html?(id)
Добавлено спустя   4 минуты  5 секунд:
Да и еще одно как строго указать 11 вхождений? Пробовал {11} типа rewrite ^/y/v?([a-zA-Z0-9\-_]{11})$ /y/$1.html permanent; не проходит на валидность

Неактивен

#5 2013.11.22 12:16

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6538
Карма: 108
Профиль Веб-сайт

Re: Как сделать переадресацию по условию в конфиге nginx?

Код:

1
^/y/v?([a-zA-Z0-9\-_]+)$

подозреваю, что перед ? должен быть обратный слеш.

Код:

1
^/y/([a-zA-Z0-9\-_]+)\.html.*?$ /youtube/videoView.php?$1 last;

вместо last, вероятно, должно быть break.

Неактивен

#6 2013.11.22 15:42

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

Gemorroj написал:

Код:

1
^/y/v?([a-zA-Z0-9\-_]+)$

подозреваю, что перед ? должен быть обратный слеш.

Да нет не обязательно. Как правило все линки идут так /y/v?123abc
А блин Ты имеешь в виду за экранирующий слэш? те за обратный. Тогда да думаю должен быть)

Gemorroj написал:

Код:

1
^/y/([a-zA-Z0-9\-_]+)\.html.*?$ /youtube/videoView.php?$1 last;

вместо last, вероятно, должно быть break.

Сейчас попробуем)
Добавлено спустя   1 минуту  18 секунд:
Gemorroj А как на счет этого?

TLENS написал:

Да и еще одно как строго указать 11 вхождений? Пробовал {11} типа rewrite ^/y/v?([a-zA-Z0-9\-_]{11})$ /y/$1.html permanent; не проходит на валидность

Неактивен

#7 2013.11.22 16:23

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

При экранировании знака вопроса вообще не срабатывает.
        rewrite ^/y/v\?([a-zA-Z0-9\-_]+)$ /y/$1.html permanent;
В без экранирования бросает на /y/v.html?$1 такое ощущение что в реврайт попадает только патч а запрос после ? он не видит

Неактивен

#8 2013.11.22 17:25

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

хм странное явление. Сделал реврайт такого типа rewrite ^/y/v(.*?)$ /y/zzz.html?r=$request_uri&var=2 permanent; и при запросе /y/v?IKqV7DB8Iwg улетаю на /y/zzz.html?r=/y/v?IKqV7DB8Iwg&var=2&IKqV7DB8Iwg
Это дает понять что в конец все равно вставляется query_string
Добавлено спустя   2 минуты  36 секунд:
А $1 у нас пустой rewrite ^/y/v(.*)$ /y/zzz.html?r=$1&var=2 permanent; кидает на /y/zzz.html?r=&var=2&9vQy0ip-SuIsds

Неактивен

#9 2013.11.22 17:40

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

Таки да реврайт не задевает query_string
rewrite ^(/y/v.*)$ /y/t.html?r=$1&var=2 permanent;
При запросе /y/v?IKqV7DB8Iwg34
Шлет нас на /y/t.html?r=/y/v&var=2&IKqV7DB8Iwg34

Неактивен

#10 2013.11.22 22:55

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Как сделать переадресацию по условию в конфиге nginx?

Обрыл уже гугл. Некоторые советуют знак вопроса вставлять в конец выходящей строки типо rewrite ^(/y/v.*)$ /y/t.html?r=$1&var=2? permanent; Это нужно для того что бы исключить автоподстановку того что после знака вопроса. Но вот мой вопрос с помощью этого решить не возможно.
Добавлено спустя    26 секунд:
Здесь явно нужен другой подход

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.1
0.015 s