Как мне сделать 301 Перенаправление всех дочерних страниц на родительскую страницу, за исключением нескольких дочерних страниц. 301 Перенаправлено на другие конкретные страницы моего сайта.
Ниже работает перенаправление всех дочерних страниц на родительскую страницу:
RewriteRule ^(parent-page/). https://www.example.com/$1 [R=301,L]
Как мне тогда перейти к 301 Перенаправлению определенной дочерней страницы указанной выше родительской страницы на другую страницу сайта?
Пример переадресации 301, которую я пытаюсь выполнить после перенаправления всех дочерних страниц на родительскую страницу:
301 Redirect /parent-page/one https://www.example.com/parent-page-two/one
301 Redirect /parent-page/one https://www.example.com/parent-page-two/one
(Кстати, это должно быть Redirect 301 ....
)
Однако вы не должны использовать mod_alias Redirect
директиву, когда вы уже используете mod_rewrite (т.е. RewriteRule
) для вашего общего перенаправления. Mod_rewrite RewriteRule
воля всегда запустить первым, независимо от очевидного порядка ваших директив. Если вы уже используете mod_rewrite, используйте mod_rewrite для всех ваших перенаправлений.
Вам следует использовать более конкретный RewriteRule
перед ваш существующий "общий" RewriteRule
. Более конкретные директивы должны быть первыми, так как директивы обрабатываются в порядке сверху вниз (в пределах одного модуля).
Например:
# Enable the rewrite engine (mod_rewrite)
RewriteEngine On
# More specific redirects...
RewriteRule ^parent-page/one$ https://www.example.com/parent-page-two/one [R=301,L]
# Generic redirect last
RewriteRule ^(parent-page/). https://www.example.com/$1 [R=301,L]
Перед тестированием вам необходимо очистить кеш браузера, так как любые ошибочные 301 (постоянные) перенаправления, скорее всего, были кэшированы вашим браузером. По этой причине часто бывает проще сначала протестировать с 302 (временными) перенаправлениями, чтобы избежать проблем с кешированием, и переключаться на 301 (если это намерение) только после того, как вы подтвердите, что все работает.
Однако, если вы еще не используете mod_rewrite для чего-либо еще, вы можете вместо этого сделать это с помощью «более простого» mod_alias. Например:
# More specific redirects...
RedirectMatch 301 ^/parent-page/one$ https://www.example.com/parent-page-two/one
# Generic redirect last
RedirectMatch 301 ^/(parent-page/). https://www.example.com/$1
Но не смешивайте перенаправления от mod_alias и mod_rewrite, так как вы можете получить неожиданные конфликты.
Обратите внимание, что mod_alias Redirect
директива сопоставление префиксов, поэтому это может или не может быть подходящим для вашего сценария. Это зависит от того, есть ли у вас другие URL-адреса, Начало /parent-page/one
это не должно быть перенаправлено.
ОБНОВИТЬ: Если у вас всего один домен, на который вы выполняете перенаправление, и вы уже канонизировали схему (HTTP или HTTPS) и имя хоста (example.com
или www.example.com
) тогда вам не обязательно необходимость чтобы указать абсолютный URL-адрес в замена. Например, вы можете использовать путь относительно корня и упростить чтение директивы:
# Generic redirect last
RewriteRule ^(parent-page/). /$1 [R=301,L]
и т.п.