RewriteRule
не работает со строкой запроса напрямую - для этого нужно использовать RewriteCond
.
Вот правило - оно будет перенаправлять (301 постоянное перенаправление) ЛЮБОЙ URL, который имеет большечем 1 параметр в строке запроса и 1 из них ref
RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)ref=([^&]*)(&|$)
RewriteCond %{QUERY_STRING} !^ref=([^&]*)$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}?ref=%2 [R=301,L]
Например:
Он будет перенаправлять http://www.example.com/hello.php?id=86&name=John&ref=12d34888&me=yes
на тот же URL, но сref
только параметр: http://www.example.com/hello.php?ref=12d34888
.
Это ничего не изменит, если присутствует только параметр ref
или его нет вообще, например, http://www.example.com/hello.php?ref=12d34888
или http://www.example.com/hello.php
.
Если такое перенаправление должно работать только для корневых хитов сайта, то измените строку RewriteRule
на эту:
RewriteRule ^$ http://%{HTTP_HOST}/?ref=%2 [R=301,L]
(если она размещена вФайл .htaccess в корневой папке веб-сайта - если он помещен в конфигурацию сервера / контекст виртуального хоста, правило должно быть слегка изменено).
http://www.example.com/?id=86&name=John&ref=12d34888&me=yes
-> http://www.example.com/?ref=12d34888
Если он должен быть перенаправлен на другой домен, замените %{HTTP_HOST}
на доменное имя, например:
RewriteRule ^$ http://www.exampe.com/?ref=%2 [R=301,L]
Все это было проверено ранееразмещение.