Если ваш .htaccess
файл находится в документе root ...
Чтобы удалить только URL-параметр utm_source
(а не все параметры), вы можете что-то сделать как сначала:
RewriteCond %{QUERY_STRING} ^(.*)&?utm_source=[^&]*&?(.*)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
Затем, чтобы переписать все запросы в index2.html
, вы должны сделать что-то вроде следующего (при условии, что вы не хотите также переписывать запросы для существующих файлов):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index2.html [L]
Однако в своей директиве вы не просто переписываете на index2.html
, вы также пытаетесь добавить дополнительную информацию о путевом имени (path-info) - требуется ли это? Хотя в вашем коде вам не хватает sla sh (при использовании в .htaccess
), поэтому перезапись будет искажена и приведет к 404. Если вам нужна информация о пути, измените последний RewriteRule
на:
RewriteRule (.*) index2.html/$1 [L]
Сводка
RewriteEngine On
# Remove the "utm_source" URL parameter
RewriteCond %{QUERY_STRING} ^(.*)&?utm_source=[^&]*&?(.*)$
RewriteRule (.*) /$1?%1%2 [R=302,L]
# Rewrite all requests to "index2.html"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index2.html [L]
Нет необходимости в оболочке <IfModule>
, так как ваш код предположительно не будет работать без mod_rewrite? Также нет необходимости в директиве RewriteBase
, если файл .htaccess
находится в документе root.
RewriteCond %{QUERY_STRING} "utm" [NC]
RewriteRule ^(.*)?$ "index2.html$1" [QSA,L]
RewriteRule (.*) /$1? [R=301,L,QSD]
Существует ряд проблем с вашим текущим директивы. Выделенная пара ...
Правила расположены в неправильном порядке, поскольку условие, которое проверяет строку запроса, применяется только к первому следующему RewriteRule
. Следовательно, последнее RewriteRule
(то есть «удаляет параметр utm_source») выполняется безоговорочно и приведет к перенаправлению l oop.
Первое правило (которое переписывается на index2.html$1
) будет выполняться только в том случае, если в строке запроса (где-либо) присутствует «utm» (он не удален). Но index2.html$1
приведет к неправильной перезаписи в .htaccess
(как упомянуто выше - вы пропускаете sla sh).
Ваше последнее правило удаляет всю строку запроса, а не только параметр utm_source
. Тем не менее, ваше первое правило пытается добавить строку запроса в переписанный запрос.