URL-адреса, как показано ниже (есть 2 сайта, один с www, а другой без него)
https://example1.com/any-path-here/?_gl=1*um0ntk*_ga*YW1wLUVyYS1QbHgwcFp1SEJBYVlGSlNYdWNQUWIxNGVxY2VhakRDNDUtYmJUZWZPV1M2WEdWN2s2dXVRNzNZWGNTdkk
https://www.example2.com/hello-how-are-you-today/?_gl=1*1lcwex2*_ga*YW1wLXBtWXdrdWNEcTRjTVcwWjMzTzJwNEdJeU5vTmo5UVF0RmFhTEdpbkdMdjgyLXRNQXJaM21oRGpUX2ppSnB3dGs
следует перенаправить на
https://example1.com/any-path-here/
https://www.example2.com/hello-how-are-you-today/
Только _gl = кажется постоянным.
Я пытался:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} _gl=
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>
И
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^_gl=*
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>
И другие правила. Но вроде ничего не работает.
Я надеюсь, что решение не испортит перенаправление голого домена и перенаправление https.
Хотя ни одно из опубликованных вами правил не является строго правильным, они оба должны выполнять необходимое перенаправление. Если у вас есть другие директивы в вашем .htaccess
file, то наиболее вероятная причина заключается в том, что они расположены в неправильном порядке и возникает конфликт.
Эти перенаправления должны быть в верхней части .htaccess
файл, перед любыми существующими директивами mod_rewrite. (Хотя вы можете комбинировать его с перенаправлениями HTTPS / голого домена?)
Вам не нужен <IfModule>
обертка, и вам не нужна RewriteEngine On
директива, если она уже существует в вашем .htaccess
файл.
Чтобы удалить строку запроса, когда запрос содержит строку запроса, которая начинается _gl=
затем CondPattern должен прочесть ^_gl=
. Конечный *
повторяет предыдущий =
и _gl=
соответствует этой строке в любом месте строки запроса, а не только в начале.
Например:
RewriteCond %{QUERY_STRING} ^_gl=
RewriteRule ^ %{REQUEST_URI}? [R,L]
Если вы используете Apache 2.4, вы можете использовать QSD
flag (Query String Discard) вместо добавления ?
к замена строка. т.е. RewriteRule ^ %{REQUEST_URI} [QSD,R,L]