Подтвердить что ты не робот

Apache Redirect 301 не работает при использовании параметров GET, таких как? Blah =

Я создал новый сайт PHP для клиента и хочу перенаправить результаты ранжирования Google из старой структуры сайта на новый.

Я поставил несколько десятков Redirect 301 в .htaccess в документе, и, хотя некоторые из них работают нормально, у меня проблемы с кучей других.

Это отлично работает:

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152

Это не работает! (что приводит к 404, поскольку перенаправление просто пропущено):

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html

Переадресации смешиваются в файле .htaccess, и только переадресации с параметрами GET появляются с ошибкой.

Есть ли обходной путь? Игнорирование неудачных переадресаций не является вариантом для клиента. Спасибо за ваши мысли.

4b9b3361

Ответ 1

Хотя аргумент Gumbo answer был правильным, я не мог заставить его RewriteRule работать.

Добавление другой RewriteCond сделало это. Было проверено и работает нормально.

RewriteCond %{REQUEST_URI} /nl/index.php$
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301]

Ответ 2

Redirect работает только по URL-адресам:

Старый URL-путь - это чувствительный к регистру (% -декодированный) путь, начинающийся с косой черты. [...]

Итак, запрос URL (часть после первого ? до первого # после) не отмечена.

Но вы можете использовать mod_rewrite, чтобы сделать это:

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301]
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301]

Ответ 3

Соглашаясь с ответами Gumbo и Martijn... но:

Типично в Martijn's должно быть "^", чтобы запустить регулярное выражение для условия REQUEST_URI:

RewriteCond %{REQUEST_URI} ^/nl/index.php$

Я тоже мог получить только Martijn, а не Gumbo, чтобы работать там, где был мой файл .htaccess.

Кроме того, если вы не хотите, чтобы строка параметров передавалась с помощью перезаписи, вы должны добавить "?" в конце URL-адреса:

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301]

В противном случае, следуя коду Martijn, он читает "если ваш URL-адрес:/nl/index.php?mID=24511&subID=0, то перенаправление на http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0 с 301 постоянным заголовком перенаправления и не обрабатывать больше правил по этому URL-адресу"

Это может быть или не быть тем, что вы хотите, и быть справедливым как общее правило, если параметры не поняты, они просто будут проигнорированы без какого-либо ущерба, поэтому, вероятно, это не имеет значения. Однако, если вы хотите перенаправить человека на новую страницу и хотите "красивые URL-адреса", предпочтительнее удалить строку параметров, поэтому придерживайтесь "?". в конце целевого URL.