Назад | Перейти на главную страницу

Как перенаправить URL-адрес со строковым запросом на тот же URL-адрес без строкового запроса?

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]