перенаправление страницы на URL с помощью #

#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-пути.