nginx bitrix редирект

baas
На сайте с 17.09.2012
Offline
171
1630

Доброй ночи.

Подскажи как реализовать на nginx такие редиректы.

Redirect 301 /catalog/Joy/joy_em_6_1t/ /catalog/Joy/joy_em_1x1t/

И как такое лучше перевести на nginx

301 htlbhtrn c www на без www я делал, а вот как остальное, хз.

Подскажите подалуйста.

<IfModule mod_rewrite.c>

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
baas
На сайте с 17.09.2012
Offline
171
#1

location /catalog/Joy/joy_em_6_1t/ {

rewrite ^(.*)$ /catalog/Joy/joy_em_1x1t/ redirect;

}

Не работает почему то редирект.

L
На сайте с 10.02.2015
Offline
261
#2
baas:
location /catalog/Joy/joy_em_6_1t/ {
rewrite ^(.*)$ /catalog/Joy/joy_em_1x1t/ redirect;
}
Не работает почему то редирект.

nginx нужно рестартовать:

#nginx -t && nginx -s reload

---------- Добавлено 21.05.2016 в 10:46 ----------

http://dev.1c-bitrix.ru/community/webdev/user/16002/blog/1965/?commentId=13910

baas
На сайте с 17.09.2012
Offline
171
#3
livetv:
nginx нужно рестартовать:
#nginx -t && nginx -s reload

---------- Добавлено 21.05.2016 в 10:46 ----------

http://dev.1c-bitrix.ru/community/webdev/user/16002/blog/1965/?commentId=13910

Не понял, к чему вы это написали?

Я после изменения всегда перезагружаю nginx.

ну даладно, один тип редиректа решил так.

Redirect 301 /catalog/Joy/joy_em_6_1t/ /catalog/Joy/joy_em_1x1t/

нужно так.

if ($uri ~ "/catalog/Joy/joy_em_6_1t/") {

rewrite /catalog/Joy/joy_em_6_1t/ /catalog/Joy/joy_em_1x1t/ permanent;
}

А вот как решить проблему редиректов таких?

RewriteCond %{THE_REQUEST} /(.*)index.php.*$

RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]
J
На сайте с 20.02.2014
Offline
120
jkm
#4

Можно же и без if


rewrite (/catalog/Joy/joy_em)_6_1t/ $1_1x1t/ permanent;
rewrite ^(.*)index\.(?:php|html) $1 permanent;

Второе правило может вызвать зацикливание так что лучше проверять $request_uri.


if ($request_uri ~ "^(.*)index\.(?:php|html)") {
return 301 $1;
}
baas
На сайте с 17.09.2012
Offline
171
#5
jkm:
Можно же и без if

rewrite (/catalog/Joy/joy_em)_6_1t/ $1_1x1t/ permanent;
rewrite ^(.*)index\.(?:php|html) $1 permanent;

Второе правило может вызвать зацикливание так что лучше проверять $request_uri.

if ($request_uri ~ "^(.*)index\.(?:php|html)") {
return 301 $1;
}

Меня сейчас больше волнуют эти правила.

RewriteCond %{THE_REQUEST} /(.*)index.php.*$

RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]

С if работают, да и ладно.

J
На сайте с 20.02.2014
Offline
120
jkm
#6


RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]

Эти правила отрезают index.html и index.php

Эквивалент


if ($request_uri ~ "^(.*)index\.(?:php|html)") {
return 301 $1;
}
baas
На сайте с 17.09.2012
Offline
171
#7
jkm:

RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]

Эти правила отрезают index.html и index.php
Эквивалент

if ($request_uri ~ "^(.*)index\.(?:php|html)") {
return 301 $1;
}

Спасибо завтра попробую.

baas
На сайте с 17.09.2012
Offline
171
#8
jkm:

RewriteCond %{THE_REQUEST} /(.*)index.php.*$
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{THE_REQUEST} /(.*)index.html.*$
RewriteRule .* /%1 [R=301,L]

Эти правила отрезают index.html и index.php
Эквивалент

if ($request_uri ~ "^(.*)index\.(?:php|html)") {
return 301 $1;
}

А как мне теперь сделать исключения редиректа index.(php|html) ?

site.local/personal/index.php нужно отдача с индексным файлом.

дела. так

if ($request_uri ~ "^((!personal).*)index\.(?:php|html)") {

return 301 $1;
}

Но что то он как то криво работает,

J
На сайте с 20.02.2014
Offline
120
jkm
#9

(?! ) - негативная опережающая проверка.

Строка в $request_uri начинается с /.

Нужно (?!/personal/) или /(?!personal/)


"^(/(?!personal).*)index\.(?:php|html)"

В исходном правиле для index.php было дополнительное условие RewriteCond %{QUERY_STRING} ^\z

Т.е. index.html удалялся всегда, а index.php только когда в адресе нет GET параметров.

Можно после php добавить $.


"^(.*)index\.(?:php$|html)"
baas
На сайте с 17.09.2012
Offline
171
#10
jkm:
(?! ) - негативная опережающая проверка.
Строка в $request_uri начинается с /.
Нужно (?!/personal/) или /(?!personal/)

"^(/(?!personal).*)index\.(?:php|html)"

В исходном правиле для index.php было дополнительное условие RewriteCond %{QUERY_STRING} ^\z
Т.е. index.html удалялся всегда, а index.php только когда в адресе нет GET параметров.
Можно после php добавить $.

"^(.*)index\.(?:php$|html)"

Спасибо. Работает.

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