Получаю ошибку 404 если в адресе есть ?q=

Главные вкладки

Аватар пользователя oleg220 oleg220 31 мая 2021 в 22:35

Всем привет!
Заметил во внутренней статистике сайта, а потом и подтвердил это Яндекс Метрикой, что получаю в день по 5-10 ошибок 404 от заходов с рекламы Яндекс Директа.
Проанализировал, что у этих ошибок общее и понял, что все такие адреса почему-то имеют в урле "&q="
К примеру, такой
site.ru/gazonokosilki?from=yandex.ru;search%26%23x2F;pad%26%23x2F;;web;;0;&q=бензиновая%20газонокосилка%20для%20дачи&etext=2202.RSByUXFWPmuKIX9b69zX9CPYOgG16LweXSG0G0LPJRJlwIdP5X_SOmr5XzrYhBOpoUy85golLKBOKPXV6i3TJVG5JQA1oaresyDbkSDD_XthcmpldWhxdnlkeWZlZmJx.ec8eacfc5386d742fcf6bc2b8482e87666e167b4&baobab_event_id=kp75stecyh

Как я понимаю, т.к. друпал сам использует "&q=", то возникает такой конфликт.

Я не просил Яндекс добавить "&q=" в адрес рекламируемой страницы, и пока не знаю, как это убрать оттуда (поддержка пока молчит).

Как то можно решить эту проблему на стороне сайта?

Лучший ответ

Аватар пользователя oleg220 oleg220 2 июня 2021 в 14:42

По моему, смог добить. Добавил 1 строчку:

RewriteEngine on
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteCond %{QUERY_STRING} (^|&)from= [NC]
RewriteCond %{QUERY_STRING} ^(.*)&?q=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

Вроде всё работает. Спасибо огромное OldWarrior за 99% работы.

Комментарии

Аватар пользователя OldWarrior OldWarrior 1 июня 2021 в 4:41
1

oleg220 wrote: Как то можно решить эту проблему на стороне сайта?

Прицепиться к любому другому параметру запроса, гарантированно передаваемому по любым ссылкам с Директа вместе с q=. Например, из вашего примера выше это потенциально может быть baobab_event_id=. Главное - убедиться, чтобы параметр был универсальным (присутствовал во всех случаях переходов с Директа). Он будет идентификатором (маркером) перехода по ссылке с директа.

Далее - дописать .htaccess (сразу после RewriteEngine on), добавив самую первую обработку правил редиректа (с очисткой запроса от q=) для случая, когда в запросе приходит этот параметр-маркер.

Например, как-то так (только для примера, не гарантирую работоспособность):

...
RewriteEngine on

RewriteCond %{QUERY_STRING} (^|&)baobab_event_id= [NC]
RewriteCond %{QUERY_STRING} ^(.*)&?q=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]
...

Аватар пользователя oleg220 oleg220 1 июня 2021 в 18:02

Спасибо большое за ответ!
Попробовал, вижу, что нужный кусок адреса вырезается. Но, проиходит переадресация на главную страницу. Не подскажите, что изменить, чтобы на той же странице оставаться? Как то не очень у меня с этими символами.

Аватар пользователя OldWarrior OldWarrior 1 июня 2021 в 20:24

Я заочно не смогу вам помочь.
Ситуацию нужно исследовать на стороне вашего хоста.

Хотите - пишите в личные сообщения, попробуем договориться.

Аватар пользователя oleg220 oleg220 2 июня 2021 в 14:42

По моему, смог добить. Добавил 1 строчку:

RewriteEngine on
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteCond %{QUERY_STRING} (^|&)from= [NC]
RewriteCond %{QUERY_STRING} ^(.*)&?q=[^&]+&?(.*)$ [NC]
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]

Вроде всё работает. Спасибо огромное OldWarrior за 99% работы.