Перенаправление всего сайта на одну страницу

20 дек. 2012 г., 23:30:14
Просмотры: 22.4K
Голосов: 11

Мне нужно перенаправить весь WordPress сайт на одну WordPress страницу. Что-то вроде режима обслуживания, но перенаправление должно вести на опубликованную WordPress страницу. К сожалению, страница обслуживания, которую мне нужно показать, должна использовать другие WordPress плагины.

Я не знаю ни одного плагина режима обслуживания, который позволяет это сделать. В лучшем случае они позволяют писать пользовательский HTML/CSS код.

Я думал о правиле mod_rewrite в .htaccess. Однако я очень слабо разбираюсь в mod_rewrite.

Сначала я отключил канонические перенаправления.

Затем я попробовал использовать:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php?page_id=813$
RewriteRule ^(.*)$ /index.php?page_id=813 [R=307,L]

Однако эти правила создают циклы перенаправления. page_id=813 это ID моей страницы обслуживания, конечно.

Кто-нибудь знает плагин режима обслуживания, который перенаправляет на опубликованную страницу?

Или может кто-то помочь исправить правила mod_rewrite? Дополнительное спасибо, если мы сможем исключить /wp-admin из правил перенаправления.

0
Все ответы на вопрос 3
2
16

Вы можете сделать это прямо внутри WordPress, вместо того чтобы придумывать запутанное и избыточное решение через .htaccess.

Мы можем подключиться к фильтру template_redirect, который срабатывает только на фронтенде (не в админке wp-admin). Затем используем функцию is_page() для проверки, просматривается ли страница с ID 813. Если нет, перенаправляем на эту страницу с помощью функции wp_redirect().

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
    exit;
} );

Это отлично подойдет для режима обслуживания, так как перенаправление выполняется с HTTP-заголовком 302 'временное', сообщая ботам и поисковым системам, что сайт скоро будет доступен. Однако если вы перманентно перемещаете сайт, возможно, стоит использовать HTTP-заголовок 301 'постоянное' для перенаправления. Это можно сделать, добавив второй параметр в функцию wp_redirect. Пример:

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
21 дек. 2012 г. 01:12:10
Комментарии

Это отлично подходит и для моих целей. С одним дополнением - сайт "закрыт" навсегда, и я хочу, чтобы WordPress продолжал работать, отображая прощальную страницу в качестве главной. Можно ли добавить заголовок 301 к этому типу редиректа для SEO?

Tapefreak Tapefreak
24 мая 2013 г. 04:42:14

@Tapefreak Вы можете установить HTTP-заголовок в качестве второго параметра функции wp_redirect. Пример: wp_redirect( home_url( 'index.php?page_id=183' ), 301 );

shea shea
24 мая 2013 г. 06:30:39
0

Я встроил принятый ответ от @shea в однодокументный плагин и добавил две опции: перенаправлять только неадминистраторов и перенаправлять на произвольный URL.

Если вам интересно, пожалуйста, скачайте плагин с Github => https://github.com/Idearia/wp-redirect-website-to-url.

Настройки

Настройки плагина очень просты; на данный момент они жестко прописаны в файле плагина, но я могу добавить страницу настроек, если пользователи попросят:

  • DESTINATION_URL: Полный URL, на который будут перенаправляться пользователи; может быть страницей вне домена сайта.
  • DESTINATION_URL_ID: Если URL перенаправления — это страница или запись WordPress, укажите здесь её ID в WordPress.
  • USER_CAPABILITY: Пользователи с этой возможностью не будут перенаправлены; оставьте пустым, чтобы перенаправлять всех; по умолчанию 'manage_options', что доступно администраторам.
  • REDIRECT_STATUS_CODE: Код статуса перенаправления: 302 для временного, 301 для постоянного.
  • DEBUG: Выводить ли отладочную информацию в debug.log.

Обновленная информация на странице Github => https://github.com/Idearia/wp-redirect-website-to-url.

Обратите внимание, что плагин очень простой; более опытные пользователи могут рассмотреть один из множества плагинов для обслуживания, доступных в репозитории WordPress.org.

Дайте мне знать, если у вас возникнут проблемы с использованием плагина.

11 июл. 2018 г. 20:43:07
0

Я бы выбрал гораздо более простое решение. Предполагаю, что вам нужно, чтобы посетители видели только одну страницу — без необходимости отображения каких-либо страниц WordPress — при любом запросе к вашему домену.

Так почему бы не создать HTML-страницу, оформить её с помощью CSS и разместить в отдельной папке на вашем хостинге? Убедитесь, что страница выглядит так, как вы хотите.

Затем просто настройте ваш домен на новую папку. На большинстве хостингов можно указать корневую папку для домена. Направьте домен на эту новую корневую папку. Нет необходимости в сложных перенаправлениях через htaccess, плагинах WordPress или специальных фильтрах.

Или вы можете переместить всё содержимое из текущей корневой папки домена и заменить его вашей простой HTML-страницей.

Многие хостинг-провайдеры также предлагают функцию "глобального перенаправления" для любого запроса к любой странице вашего домена.

Любой из этих вариантов будет простым решением для вашей задачи — отображать только одну страницу для всего домена.

Если вам действительно нужно решение через htaccess, используйте этот код:

RewriteEngine on

RewriteRule ^(.*)$ http://www.example.com/  [R=permanent,L]

...заменив example.com на ваш реальный домен. Это также порадует SEO.

25 сент. 2018 г. 09:33:56