Добавить строку в конце URL, используя htaccess, который также имеет строку запроса
Я хочу измениться
domain.com/division1/index.php?members/maxmusterman.5
в
domain.com/division1/index.php?members/maxmusterman.5/#div
То есть, если URL содержит index.php? Members, то я добавляю / # div в конце url. Я пробовал это
RewriteEngine On
RewriteCond %{REQUEST_URI} index.php?
RewriteRule (.*) /%1/%{QUERY_STRING}&123 [L,QSA,R=301]
но возвращается
domain.com/members/maxmusterman.5&123?members/maxmusterman.5
Обратите внимание, что & 123 присоединяется после URI перед запуском параметров. Я исследовал флаг QSA htaccess, но не смог найти способ добавить пользовательскую строку в конец строки запроса. Как мне это сделать. Здесь я использовал & 123 для целей тестирования, фактическое требование - это добавление / # div
1 ответ
Перенаправить
domain.com/division1/index.php?members/maxmusterman.5
вdomain.com/division1/index.php?members/maxmusterman.5/#div
, Вы можете использовать что-то вроде следующего:
RewriteEngine on
RewriteCond %{QUERY_STRING} !loop=no
RewriteRule ^division1/index\.php$ %{REQUEST_URI}?%{QUERY_STRING}&loop=no#div [L,R,NE]
Я добавил дополнительный пераметр loop=no
на целевой URL, чтобы предотвратить infinite loop
ошибка. Вы не можете избежать этого, так как ваш старый и новый URL идентичны и могут вызвать цикл перенаправления, если вы удалите параметр RewriteCond и Query.
NE
(без escape) флаг важен всякий раз, когда вы перенаправляете фрагмент, в противном случае mod-rewrite преобразует #
в его гексе %23
,
Решение № 2
RewriteEngine on
RewriteCond %{THE_REQUEST} !.*loop=no [NC]
RewriteCond %{THE_REQUEST} /division1/index\.php\?(.+)\s [NC]
RewriteRule ^ /division1/index.php?%1&loop=no#div [NE,L,R]
Очистите кеш браузера перед тестированием этих перенаправлений.