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

10

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

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

Я думал о правиле .htaccess mod_rewrite. Тем не менее, я очень слаб с 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Конечно, это идентификатор моей страницы обслуживания.

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

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

карите
источник

Ответы:

14

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

Мы можем подключиться к template_redirectфильтру, который срабатывает только во внешнем интерфейсе (не в wp-admin). Затем мы используем is_page()функцию, чтобы проверить, просматриваем ли мы страницу с идентификатором 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, позволяя ботам и поисковым системам знать, что ваш сайт скоро будет запущен. Однако, если вы постоянно перемещаете сайт, вы можете использовать 301 «постоянный» HTTP-заголовок для перенаправления. Вы можете сделать это, добавив второй параметр в 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;
} );
карите
источник
Это прекрасно работает и для моей цели. За исключением добавления поворота - сайт навсегда «закрыт», и я хочу, чтобы WP работал и работал, пока страница прощания не стала домашней страницей. Есть ли способ добавить заголовок 301 к этому типу перенаправления для SEO?
Tapefreak
@Tapefreak Вы можете установить HTTP-заголовок в качестве второго параметра wp_redirectфункции. Пример:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
ши
1

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

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

Опции

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

  • DESTINATION_URL : полный URL-адрес, куда перенаправлять пользователей; может быть страница за пределами домена сайта.
  • DESTINATION_URL_ID : если URL-адрес перенаправления представляет собой страницу или сообщение WordPress, укажите здесь его идентификатор 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.

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

Гидо Вальтер Петтинари
источник
0

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

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

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

Или вы можете переместить весь контент из текущей корневой папки (папок) домена и поместить в него свой простой файл HTML.

Возможно, хостинг-места также имеют «глобальное перенаправление» для любого запроса на любую страницу вашего домена.

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

Если вы действительно хотите решение htaccess, используйте это:

RewriteEngine on

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

... замена вашего фактического домена. Делает SEO тоже счастливым.

Рик Хеллуэлл
источник