#apache #.htaccess #redirect #mod-rewrite
#apache #.htaccess #перенаправление #мод-перезапись
Вопрос:
Я хотел бы перенаправить URL-адрес (скажем https://www.example.com/de/page-a /) к URL-адресу, имеющему параметр с # (https://www.example.com/de/page-b/#filter:fields=6 ).
Я не нахожу правильного правила, используя RewriteRule или Redirect . Он всегда перенаправляет на https://www.example.com/de/page-b /, игнорируя последнюю часть.
Может ли кто-нибудь помочь мне в этом?
С наилучшими пожеланиями
Комментарии:
1. «игнорирование последней части». — Он не должен «игнорировать» последнюю часть (если вы не пытаетесь перенаправить с URL-адреса с помощью a
#
) — пожалуйста, покажите, что вы пробовали.2. Перенаправление ^de/page-a/$ exemple.com/de/page-b/#filter:fields=51 ? [L,R=301]
Ответ №1:
Redirect ^de/page-a/$ exemple.com/de/page-b/#filter:fields=51? [L,R=301]
Вы путаете директивы. Директива mod_alias Redirect
принимает простой URL-адрес, относящийся к корню (начинающийся с косой черты), в качестве аргумента URL-адреса источника. Таким образом, приведенное выше никогда не будет совпадать, и ничего не произойдет. В [L,R=301]
директиве, используемой mod_rewrite, нет флагов Redirect
RewriteRule
.
Например:
Redirect 301 /de/page-a/ /de/page-b/#filter:fields=51
Вам не нужно указывать абсолютный URL-адрес в качестве целевого, если вы перенаправляете на ту же схему имя хоста.
При перенаправлении на идентификатор фрагмента (все после #
) вам нужно быть осторожным с циклами перенаправления, поскольку фрагид не передается обратно на сервер. В этом случае все в порядке, поскольку вы перенаправляете на другой URL-путь, т.Е.. page-a
Для page-b
. Но вы не могли перенаправить с page-a
на page-a
(тот же URL-путь и строка запроса) и просто изменить fragid, поскольку это создаст цикл перенаправления. Для этого вам нужно будет использовать JavaScript.
ПРИМЕЧАНИЕ: сначала протестируйте с 302 (временным) перенаправлением, чтобы избежать проблем с кэшированием.
Если вы хотите реализовать это с помощью mod_rewrite (т.Е. RewriteRule
) — возможно, если вы уже используете mod_rewrite — тогда вы могли бы сделать следующее вместо:
RewriteEngine On
RewriteRule ^de/page-a/$ /de/page-b/#filter:fields=51 [NE,R=301,L]
Обратите внимание, что в RewriteRule
шаблоне нет префикса косой черты.
NE
Флаг необходим здесь, чтобы #
предотвратить кодирование URL-адреса в ответе и обработку его как части URL-пути.