Добавлю что бы не забыть про nginx примеры редиректов.
Понадобилось на одном из проектов реализовать такие виды редиректов.
Движок сайта bitrix (древний какой то двиг).
1 Редирект
301 редирект с www на без www.
server { listen 1.1.1.2:80; server_name www.site.local; return 301 http://site.local$request_uri; } server { listen 1.1.1.2:80; server_name site.local; .... ....
2 Редирект.
Дальше нужно было к ссылкам в конце добавлять символ слэша.
То-есть, имеем ссылку site.local/catalog/preparat-i/kosmetika нужно добавить в конце слэш site.local/catalog/preparat-i/kosmetika/
Вот как это выглядит на nginx, добавляем перед локейшеном /
rewrite ^([^.\?]*[^/])$ $1/ permanent;
3 Редирект
другой редирект это с index.php, index.html на /
if ($request_uri ~ "^(.*)index\.(?:php|html)") { return 301 $1; }
Добавляем исключения для слов catalog и personal, с ними должен быть index.php.
if ($request_uri ~ "^(/(?!personal|catalog).*)index\.(?:php|html)") { return 301 $1; }
Если в апаче есть RewriteCond %{QUERY_STRING} ^\z
то нужно привести редирект в nginx к такому виду.
if ($request_uri ~ "^(/(?!personal|catalog).*)index\.(?:php$|html)") { return 301 $1; }
4 Редирект.
Другой редирект вида такого.
Redirect 301 /catalog/toy/toy_rr_1_3aa/ /catalog/toy_rr_1_3aa/
В nginx выглядит так.
Параметр permanent это означает 301 редирект.
rewrite /catalog/toy/toy_rr_1_3aa/ /catalog/toy_rr_1_3aa/ permanent;
5 Редирект.
Говорим как обрабатывать api.
location ~* api/ { rewrite ^/api/(.*)$ /api.php?_d=$1&ajax_custom=1&$args last; }
Пояснение:
Условие RewriteCond обозначает совпадение с которым будет выполнено правило RewriteRule.
Поясню метасимволы:
. – Точка — это любой символ (но только один!).
^ — Эта метка означает начала строки.
$ — Эта метка означает конец строки.
\ — Эта экранирующий слэш, позволяет считать следующий за ним символ, обычным символом.
() – Этот символ обозначает группировку.
! – Метка отрицания.
+ — Этот символ повторяется от 1 до 65536 раз.
? — Этот символ повторяется 0 или 1 раз.
* — А этот символ повторяется от 0 до 65536 раз.
Флаги определяют дополнительные опции.
R — (redirect) — По умолчанию останавливает процесс преобразования, возвращает результат в браузер клиента, как редирект на данную страницу 302, MOVED TEMPORARY. Например флагу можно указать другой код результата, R=301 и он возвратит редирект клиенту с кодом 301 MOVED PERMANENTLY.
NC — (nocase) — Этот флаг отключает проверку регистра символов.
L — (last) — Флаг останавливает процесс преобразования, текущая ссылка считается окончательной.
Понадобилось как то у одного из проектов в определенном url добавить слэш в конце.
вот на примере урл:
https://site.local/brands/yves-delorme/postelnoe-bele/&utm_source=yandex&utm_medium=cpc&utm_campaign=ra:kpibox|cn:poisk_yves_delorme_rf|cid:31934670|src:&utm_content=test_a|dop:main|b:5144609016|k:|st:|a:|s:|t:&utm_term=&roistat=direct8__5144609016_&roistat_referrer=&roistat_pos=_
Фильтрацию таких урлов сделал через if в nginx, по такому содержимому в url «utm\_source\=yandex\&utm\_medium\=cpc»
if ($request_uri !~ "utm\_source\=yandex\&utm\_medium\=cpc") { rewrite ^([^.\?]*[^/])$ $1/ permanent; }
Бывает случае что доменов однотипных много крутится и для них нужен редирект.
Вот пример такого.
server { listen 80; server_name "~^www\.(?.+)"; return 301 http://$domain$request_uri; } server { listen 80; server_name "~(?:^|\.)my_site\.local$";
Сделал редирект для всех доменов с www на без www.
Понадобилось в url убирать лишние слэши.
Допустим есть урл у сайта:
site.local/mon////site//my
делать 301 редирект на:
site.local/mon/site/my
rewrite (.*?)//+(.*) $1/$2 permanent;
Вот и вся мини инструкция nginx примеры редиректов.
помогите пожалуйста с редиктами перевести
RewriteEngine On
# Редиректы
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)\.rss.xml$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.html(.+) [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.htm$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.ht$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.h$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.$
RewriteRule ^(.*)\.(.*) $1.html [R=301,L]
RewriteRule ^page/([0-9]+)(/?)$ index.php?cstart=$1 [L]
Я в апачевских редиректах не соображаю, опишите что как должно отдаваться?
Я постараюсь сделать правила на nginx.
То-есть все это
RewriteCond %{REQUEST_URI} ^(.*)\.rss.xml$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.html(.+) [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.htm$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.ht$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\.h$ [OR]
должно редиректся на 1.html ?
емайл уведомлений нет что ли.
я перенес сайт на другой сервер раньше был этот сайт на апаче сейчас nginx
вот раньше у меня были редиректы пример сайт.ру/1591-ekipazh.html если кто то заходит так сайт.ру/1591-ekipazh.htm, сайт.ру/1591-ekipazh.ht,сайт.ру/1591-ekipazh.h то редирект автоматом перекидывает на 1591-ekipazh.html правильную ссылку а не отдает 404
как реализовать редирект для разделов вида: /razdel1/razdel2/razdel3 необходимо чтобы razdel3 переименовался в razdel4 и помещался между razdel1 и razdel2. Т.е. должно получится что-то вроде /razdel1/razdel4/razdel2. При этом razdel1 и razdel2 динамические.
Я сделал так: rewrite ^/(.*)/(.*)/razdel3 /$1/razdel4/$2 permanent;
Но при таком записи, редирект происходит и для разделов вида /(.*)/(.*)/(.*)/razdel4.
Т.е. как добиться редиректа только при совпадении первых двух разделов при условии что третий называется razdel3?
Хмм, так сразу не скажу, я не прогер что бы быстро написать динамический редирект.
А чем плохи статичные редиректы сделать?
Типа что куда и так для каждого раздела?
Вы как то мутно объяснили, можно проще, есть /razdel1/razdel2/razdel3 , нужно поместить раздел3 между 1 и 2.
Ну хз. если будит время посмотрю, тестировать нужно.
А так проще нанять прогера, что бы он написал редиректы вам.