Добавить строку в конце 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]

Очистите кеш браузера перед тестированием этих перенаправлений.

Другие вопросы по тегам