@Ysery

Какая будет команда в .htaccess?

Уважаемые специалисты.

В логах часто вижу, что на статьи сайта пытаются зайти по "кривым" ссылкам, с различными довесками, хочу это исправить.

Есть вот такая строчка

RewriteRule ^(.+?)\.html(?!/amp/).+$ https://%{HTTP_HOST}/$1.html [L,R=301]


Она отсекает дополнительные символы после .html (исключая .html/amp/). Но не отсекает GET запросы, т.е. запросы такого вида .html?<тут может быть что угодно>.

Как доработать команду, дабы отсекались ещё и все GET запросы, за исключением вот этой ...html?srp=xxxxx&srk=yyyyy

xxxxx и yyyyy, естественно, могут принимать любые значения.

P.S.
Думаю, что стоит написать о структуре ссылок на сайте, она следующая:

https://site.ru/material.html - ссылки на материалы такие
    
https://site.ru/material.html/amp/ - ссылки на AMP (используются для мобильной выдачи Google) материалы такие 
    
https://site.ru/kategoriya/ - ссылки на категории (разделы) такие
    
https://site.ru/tag/imya_tega/ - ссылки на теги, выводятся статьи с указанными в них тегами
    
https://site.ru/manage-subs-comments.html?srp=xxxxx&srk=yyyyy - ссылки на управление подпиской для посетителей, оставивших комментарии
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@dodo512
RewriteCond %{QUERY_STRING} !^$
RewriteCond %{QUERY_STRING} !(^|&)srp=
RewriteCond %{QUERY_STRING} !(^|&)srk=
RewriteRule ^(.+?)\.html$ https://%{HTTP_HOST}/$1.html? [L,R=301]

RewriteRule ^(.+?)\.html(?!/amp/).+$ https://%{HTTP_HOST}/$1.html? [L,R=301]


Или объединить в одно правило
RewriteCond $2 ^(?!/amp/).+ [OR]
RewriteCond &%{QUERY_STRING} ^(?!.*&srp=)(?!.*&srk=)&.+
RewriteRule ^(.+?)\.html(.*)$ https://%{HTTP_HOST}/$1.html? [L,R=301]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
RewriteRule ^(.+?)\.html(?!/amp/).+$ https://%{HTTP_HOST}/$1.html [L,R=301]

замени на
RewriteRule ^(.+?)\.html(?!/amp/).+$ https://%{HTTP_HOST}/$1.html? [L,R=301]

Удалится GET
А вообще в RewriteRule не входит GET поскольку он не является частью урла!
а вот так работают с GET
# 301 --- http://www.test.com/faq.html?faq=13&layout=bob => http://www.test2.com/faqs.html
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{QUERY_STRING} (^|&)faq\=13($|&)
RewriteCond %{QUERY_STRING} (^|&)layout\=bob($|&)
RewriteRule ^faq\.html$ http://www.test2.com/faqs.html? [L,R=301]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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