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

URL-адреса, как показано ниже (есть 2 веб-сайта, один с www, а другой без it)

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.

1
задан 13 October 2019 в 16:47
1 ответ

Хотя ни одно из опубликованных вами правил не является строго правильным, они оба должны выполнять необходимое перенаправление. Если у вас есть другие директивы в вашем файле .htaccess , то наиболее вероятная причина заключается в том, что они расположены в неправильном порядке, и у вас есть конфликт.

Эти перенаправления должны быть в верхней части .htaccess файл, перед любыми существующими директивами mod_rewrite . (Хотя вы можете комбинировать его с перенаправлением HTTPS / голого домена?)

Вам не нужна оболочка и не нужна RewriteEngine On ], если она уже существует в вашем файле .htaccess .

Чтобы удалить строку запроса, когда запрос содержит строку запроса, которая начинается с _gl = , тогда CondPattern следует читать ^ _ gl = . Завершающий * повторяет предыдущий = , а _gl = соответствует этой строке в любом месте строки запроса, а не только в начале.

Например:

RewriteCond %{QUERY_STRING} ^_gl=    
RewriteRule ^ %{REQUEST_URI}? [R,L]

Если вы используете Apache 2.4, вы можете использовать флаг QSD (Отмена строки запроса) вместо добавления ? к строке подстановки . т.е. RewriteRule ^% {REQUEST_URI} [QSD, R, L]

0
ответ дан 4 December 2019 в 02:37

Теги

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