imdamain
@imdamain
Marketing & Digital & Magic

Как убрать появившиеся get параметры при 301 редиректе через .htaccess?

Добрый день!

Сменили сервер. На прошлом сервере использовался веб-сервер Apache 1.3, после переноса используется Apache 2.2.

ЧПУ работает нормально, но 301 редиректы начали добавлять "хвост" из get параметров.
Понимаю что новый апач по другому обрабатывает редиректы, но не знаю как исправить. Нужно чтобы "хвост" из get перестал добавляться.

Файл .htaccess:
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !www.site.ru
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

RewriteRule ^([^/]+)/(.*)/(.*)/(.*)/(.*).htm(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4&last=$5 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)/(.*).htm(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*).htm(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3 [QSA,L]
RewriteRule ^([^/]+)/(.*).htm(.*)$ /index.php?lang=ru&module=$1&id=$2 [QSA,L]
RewriteRule ^([^/]+).htm(.*)$ /index.php?lang=ru&module=$1 [QSA,L]

RewriteRule ^([^/]+)/(.*)/(.*)/(.*)/(.*)/$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4&last=$5 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)/(.*)/(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4&last=$5 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)/(.*)/$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)/(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3&subsublevel=$4 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)/$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3 [QSA,L]
RewriteRule ^([^/]+)/(.*)/(.*)$ /index.php?lang=ru&module=$1&id=$2&sublevel=$3 [QSA,L]
RewriteRule ^([^/]+)/(.*)/$ /index.php?lang=ru&module=$1&id=$2 [QSA,L]
RewriteRule ^([^/]+)/(.*)$ /index.php?lang=ru&module=$1&id=$2 [QSA,L]
RewriteRule ^([^/]+)$ /index.php?lang=ru&module=$1 [QSA,L]

Redirect 301 /basket.htm http://www.site.ru/order.htm
Redirect 301 /cat/1811.htm http://www.site.ru/cat/1485.htm
Redirect 301 /cat/1811/196900.htm http://www.site.ru/cat/1485/172914.htm
Redirect 301 /cat/1811/196871.htm http://www.site.ru/cat/1485/172914.htm
Redirect 301 /cat/1811/196631.htm http://www.site.ru/cat/1485/172914.htm


Update:
Уточнение. Неправильно обрабатываться начали только редиректы, указанные внизу:
Redirect 301 /basket.htm http://www.site.ru/order.htm
Redirect 301 /cat/1811.htm http://www.site.ru/cat/1485.htm
Redirect 301 /cat/1811/196900.htm http://www.site.ru/cat/1485/172914.htm
Redirect 301 /cat/1811/196871.htm http://www.site.ru/cat/1485/172914.htm
Redirect 301 /cat/1811/196631.htm http://www.site.ru/cat/1485/172914.htm


Update2:
Покапал stackoverflow.com и мне подошло только решение переоформить редирект в RewriteRule и перенести в начало. Если кто знает более адекватное решение, буду рад выслушать.
RewriteEngine On
RewriteRule ^/?basket.htm$ http://www.site.ru/order.htm? [R=301,L]
RewriteRule ^/?cat/1811.htm$ http://www.site.ru/cat/1485.htm? [R=301,L]
RewriteRule ^/?cat/1811/196900.htm$ http://www.site.ru/cat/1485/172914.htm? [R=301,L]
RewriteRule ^/?cat/1811/196871.htm$ http://www.site.ru/cat/1485/172914.htm? [R=301,L]
RewriteRule ^/?cat/1811/196631.htm$ http://www.site.ru/cat/1485/172914.htm? [R=301,L]
RewriteRule ^/?cat/1811/196602.htm$ http://www.site.ru/cat/1485/172914.htm? [R=301,L]
RewriteRule ^/?cat/1811/209251.htm$ http://www.site.ru/cat/1485/209134.htm? [R=301,L]
RewriteRule ^/?cat/1811/182989.htm$ http://www.site.ru/cat/1485/171792.htm? [R=301,L]
RewriteRule ^/?cat/1811/183153.htm$ http://www.site.ru/cat/1485/171237.htm? [R=301,L]
RewriteRule ^/?cat/1811/207975.htm$ http://www.site.ru/cat/1485/167128.htm? [R=301,L]
RewriteRule ^/?cat/1811/202143.htm$ http://www.site.ru/cat/1485/194430.htm? [R=301,L]
RewriteRule ^/?cat/1811/197326.htm$ http://www.site.ru/cat/1485/168958.htm? [R=301,L]
  • Вопрос задан
  • 5918 просмотров
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
RewriteRule (.*) www.site.ru [R=301,L]
Ответ написан
shambler81
@shambler81 Куратор тега htaccess
вопрос еще не решен?
Так удалить гет вообдще

RewriteRule .* /sait_vizitka?
- обрати внимание на вопросик в конце, он удалит гет
если тебе нужно работать с самим гетом и убрать часть их то это немного неправельно поставленный вопрос
RewriteRule работает с урлом, гет не являетя его частью в принципе.

Вмм нужно двухуровневую конструкцию
# 301 --- http://shop.wildorchid.ru/Catalog/StyleCard.aspx?&shop=2&categoryid=2046&style=27600 => http://shop.wildorchid.ru/catalog/trusy/1465-vendetta/?show_all=N&arrFilter_199_447073417=Y&arrFilter_P1_MIN=500&arrFilter_P1_MAX=1399&CHECK_PRICE=N&orderBy=new_desc&set_filter=Y
RewriteCond %{QUERY_STRING} (^|&)shop=2($|&)
RewriteCond %{QUERY_STRING} (^|&)categoryid=2046($|&)
RewriteCond %{QUERY_STRING} (^|&)style=27600($|&)
RewriteRule ^Catalog/StyleCard\.aspx$ /catalog/trusy/1465-vendetta/?show_all=N&arrFilter_199_447073417=Y&arrFilter_P1_MIN=500&arrFilter_P1_MAX=1399&CHECK_PRICE=N&orderBy=new_desc&set_filter=Y [L,R=301]


Ну и да редирект на гет запрос, следовательнов вам нужно поменять ? на # и будет вам счастье.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы