jkm

Рейтинг
120
Регистрация
20.02.2014
Zhzves:
раньше в разделе сайта было формирование урлов по принципу site.ru/1/11. 1-id категории, 11- id статьи. Сейчас site.ru/category/article , где category - алиас категории, article - алиас статьи в категории. Первый вариант урла уже есть в индексе, как настроить внутренний редирект для nginx по этому разделу, чтобы не потерять позиции и вес старых ссылок?

Для перенаправления добавить отдельный блок location ~ ^/\d+/\d+$ в котором будет куча строк с rewrite ^/1/11$ /category/article


location ~ ^/\d+/\d+$ {
rewrite ^/1/11$ /category/article permanent;
rewrite ^/5/20$ /category2/article3 permanent;
}

Флаг permanent - постоянное перенаправление с кодом 301.

Флаг last завершает обработку текущего набора директив модуля ngx_http_rewrite_module, после чего ищется новый location, соответствующий изменённому URI.

Если поменять permanent на last, то перенаправление будет внутренним и страница будет доступна по /1/11 и /category/article.


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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)$ http://site.com/$1.html [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)\.html$ /?path=$1 [L,QSA]


location ~ ^/(de|es|xx|yy)/ {
return https://site.net$request_uri;
}

Ставить в блоке server для www.site.com.

От двух до четрёх слов в строке.

^(?>[^\w\n]*\w+){2,4}[^\w\n]*$
nikki4:
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Redirect 301 /produkcija https://....ru

Тут проблема в совместной работе mod_alias и mod_rewrite.

К тому времени как mod_alias будет выполнять редирект на https://....ru mod_rewrite уже выполнит RewriteRule и допишет лишние параметры "?_route_=produkcija".

В итоге редирект будет на https://site.ru/?_route_=produkcija, а движок сайта редиректит обратно на страницу /produkcija.

Нужно поменять Redirect 301 /produkcija на RewriteRule ^produkcija$ и перести вверх все редиректы.


# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/

RewriteBase /

#Редирект с www to non-www(https)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^produkcija$ https://%{HTTP_HOST}/ [L,R=301]


RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

RewriteEngine On

RewriteBase /

RewriteCond %{QUERY_STRING} ^(.*)/$
RewriteRule ^(.*)$ /$1?%1 [R=301,L]

RewriteRule ^(.*)/$ /$1 [R=301,L]
ORIGAMMI:
Видимо вход на сайт тоже идет через index.php

Там же видно что это POST запрос.

Нужно добавить проверку.

RewriteCond %{REQUEST_METHOD} !=POST


RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{THE_REQUEST} /index\.php(/(.*?))? [NC]
RewriteRule ^(.*?)index\.php(/(.*?))?$ /$1$3 [L,R=301,NC,NE]

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
dma84:
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC] [OR]

Перечисление флагов должно идти через запятую.

RewriteCond %{HTTP_HOST} ^site\.ru$ [NC,OR]
gradov81:
Не подскажите, как сделать постоянный редирект при условии что:
Старый адрес - http://www.site.ru/old.html
Новый -https://site.ru/new

Т.е. добавился протокол и страница переехала на новый алиас


server {
listen 80;
server_name www.site.ru;
rewrite ^/old\.html$ https://site.ru/new permanent;
}

Удобнее вынести редиректы в отдельный блок server.

server {

listen 80;
server_name site.ru;

rewrite ^/old-name\.html$ https://$host/new-name permanent;
rewrite ^/old-name2\.html$ https://$host/new-name2 permanent;
}

# Далее свой блок для HTTPS
server {
listen 443 ssl;
...
Всего: 749