Перенаправление 301 .htaccess с URL-адреса, содержащего символ «?»

#regex #apache #.htaccess #redirect #seo

#регулярное выражение #apache #.htaccess #перенаправление #seo

Вопрос:

Я хочу перенаправлять в .htaccess каждый URL-адрес, внутри которого есть символ «?», в корень моего сайта (domain.com).

Я прочитал это :

 301-htaccess-redirect-with-special-characters
/how-to-make-htaccess-rule-for-a-url-with-specific-characters
  

Но я все еще не знаю, как это сделать. Я знаю лишь немного регулярных выражений.

Примеры URL-адресов, которые я хотел бы перенаправить в корень моего сайта :

http://www.portaltarot.com/index.html?url=/MHL-Papus.html
http://www.portaltarot.com/index.phpindex.php ?Itemid=249

Комментарии:

1. Вы уверены, что хотите это сделать. Блокировка URL-адресов строками запроса может непреднамеренно заблокировать доступ пользователей к вашему веб-сайту. например, если вы используете AdWords и автоматическую пометку, объявления будут прерываться. маркетинг по электронной почте с отслеживанием кампаний и т.д. Если вы это делаете, делайте это для определенных значений, а не для всего.

2. Да, я уверен. У меня нет Adwords и т.д.

3. Но могут быть и другие. например, иногда твиты отправляются с помощью средств сокращения URL-адресов и добавляются коды отслеживания utm. Проверьте свои журналы, чтобы узнать, используются ли строки запроса и хотите ли вы запретить этим посетителям просматривать контент, который они ожидали.

Ответ №1:

Для этого вам нужно использовать mod_rewrite, поэтому что-то вроде:

 RewriteEngine On

RewriteCond %{QUERY_STRING} ^url=/MHL-Papus.html$ 
RewriteRule ^index.html$ / [L,R=301]

RewriteCond %{QUERY_STRING} ^Itemid=249$
RewriteRule ^index.phpindex.php$ / [L,R=301]
  

Комментарии:

1. 1) Первый URL перенаправляет на корневой каталог, но URL в navigator не изменяется, поэтому частично решается; Возможно ли изменить также URL-адрес на корневой домен?

2. 2) Второй URL заканчивается 404 (не найден) перенаправлениями на portaltarot.com /? Itemid=249

3. чтобы остановить передачу строки запроса адресату, измените / на /? например, RewriteRule ^index.html $ / ? [L,R=301]