Вы не зашли.
Главная » Компьютеры/Софт » Как сделать переадресацию по условию в конфиге nginx?
#1. TLENS Off (14)
Moderator
2013.11.09 17:05
У меня сменилась структура сайта и все ссылки надо переправлять на другой адрес с кодом 301 Moved Permanently
бывший адрес /view/id.html текущий /y/id.html
Добавлено спустя   2 минуты  23 секунды:
Да и еще если не сложно дайте пример реврайта на с /y/ID.html на /yfile/view.php?id=ID
#2. Gemorroj Off (107)
Administrator
2013.11.09 19:07
Код:
rewrite ^/view/(.+)\.html$ /y/$1.html permanent;
rewrite ^/y/(.+)\.html$ /yfile/view.php?id=$1 permanent;
если я правильно тебя понял
#3. TLENS Off (14)
Moderator
2013.11.12 02:02
Я тоже так делал. Просто парился с location тулит туда регулярку.
Сделал просто location /view/ {
rewrite...
}
#4. TLENS Off (14)
Moderator
2013.11.22 01:01
Выручай, опять изменилась структура сайта. А поисковики уже успели сожрать кучу линков.
Надо перекидать юзеров на адрес типо такого /y/(id).html сейчас все линки идут на /y/v?(id)
Вот мой конфиг:

Код:
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;
}
}
Пытался сделать что то вроде этого
Код:
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. Gemorroj Off (107)
Administrator
2013.11.22 12:12
Код:
^/y/v?([a-zA-Z0-9\-_]+)$
подозреваю, что перед ? должен быть обратный слеш.
Код:
^/y/([a-zA-Z0-9\-_]+)\.html.*?$ /youtube/videoView.php?$1 last;
вместо last, вероятно, должно быть break.
#6. TLENS Off (14)
Moderator
2013.11.22 15:03
Gemorroj написал:
Код:
^/y/v?([a-zA-Z0-9\-_]+)$
подозреваю, что перед ? должен быть обратный слеш.
Да нет не обязательно. Как правило все линки идут так /y/v?123abc
А блин Ты имеешь в виду за экранирующий слэш? те за обратный. Тогда да думаю должен быть)
Gemorroj написал:
Код:
^/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. TLENS Off (14)
Moderator
2013.11.22 16:04
При экранировании знака вопроса вообще не срабатывает.
        rewrite ^/y/v\?([a-zA-Z0-9\-_]+)$ /y/$1.html permanent;
В без экранирования бросает на /y/v.html?$1 такое ощущение что в реврайт попадает только патч а запрос после ? он не видит
#8. TLENS Off (14)
Moderator
2013.11.22 17:05
хм странное явление. Сделал реврайт такого типа 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. TLENS Off (14)
Moderator
2013.11.22 17:05
Таки да реврайт не задевает 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. TLENS Off (14)
Moderator
2013.11.22 22:10
Обрыл уже гугл. Некоторые советуют знак вопроса вставлять в конец выходящей строки типо rewrite ^(/y/v.*)$ /y/t.html?r=$1&var=2? permanent; Это нужно для того что бы исключить автоподстановку того что после знака вопроса. Но вот мой вопрос с помощью этого решить не возможно.
Добавлено спустя    26 секунд:
Здесь явно нужен другой подход
#11. TLENS Off (14)
Moderator
2013.11.23 02:02
Захерячил такой вариант
Код:
if ( $request_uri ~ "^/y/v\?([a-zA-Z0-9\-_]{11})$" ) {
rewrite .* /y/$args? permanent;
}
 
if ( $request_uri ~ "^/y/v\?([a-zA-Z0-9\-_]{11})[^a-zA-Z0-9\-_].*$" ) {
rewrite .* /y/$args permanent;
}
if ( $request_uri ~ "^/y/([a-zA-Z0-9\-_]{11})" ) {
rewrite ^/y/([a-zA-Z0-9\-_]+) /youtube/videoView.php?id=$1 last;
}
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s