Przekieruj całą witrynę na jedną stronę

10

Muszę przekierować całą witrynę WordPress na jedną stronę WordPress. Rodzaj trybu konserwacji, ale przekierowanie musi przejść do opublikowanej strony WordPress. Niestety strona konserwacji, którą muszę pokazać, musi korzystać z innych wtyczek WordPress.

Nie znam żadnej wtyczki trybu konserwacji, która by to umożliwiała. Co najwyżej pozwalają ci pisać niestandardowy kod HTML / CSS.

Myślałem o regule .htaccess mod_rewrite. Jestem jednak bardzo słaby dzięki mod_rewrite.

Najpierw wyłączyłem przekierowania kanoniczne .

Następnie próbowałem użyć:

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

Jednak reguły te generują pętle przekierowania. page_id=813jest oczywiście identyfikatorem mojej strony serwisowej.

Czy ktoś wie o wtyczce trybu konserwacji, która przekierowuje na opublikowaną stronę?

Alternatywnie, czy ktoś może mi pomóc naprawić reguły mod_rewrite? Dodatkowe okrzyki, jeśli możemy pominąć /wp-adminzasady przekierowywania.

shea
źródło

Odpowiedzi:

14

Możesz to zrobić bezpośrednio z poziomu samego WordPressa, zamiast wymyślać mylące i przepracowane poprawki .htaccess.

Możemy podłączyć się do template_redirectfiltra, który uruchamia się tylko na interfejsie (nie w wp-admin). Następnie używamy is_page()funkcji, aby sprawdzić, czy przeglądamy stronę o identyfikatorze 813. Jeśli nie, przekieruj na tę stronę za pomocą wp_redirect()funkcji.

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

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

To zadziała świetnie w trybie konserwacji, ponieważ przekierowanie jest dokonywane za pomocą 302 „tymczasowego” nagłówka HTTP, informując boty i wyszukiwarki, że Twoja strona wkrótce się uruchomi. Jeśli jednak stale przenosisz witrynę, możesz użyć 301 „stałego” nagłówka HTTP do przekierowania. Możesz to zrobić, dodając drugi parametr do wp_redirectfunkcji. Przykład:

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

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
shea
źródło
Działa to również świetnie dla mojego celu. Z wyjątkiem dodania niespodzianki - strona jest na dobre „wyłączona” i chcę, aby WP działało i wyświetlało stronę pożegnalną jako stronę główną. Czy istnieje sposób, aby dodać nagłówek 301 do tego typu przekierowań dla SEO?
Tapefreak
@Tapefreak Możesz ustawić nagłówek HTTP jako drugi parametr wp_redirectfunkcji. Przykład:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
shea
1

Zaakceptowałem odpowiedź @shea w wtyczce z jednym plikiem i dodałem dwie opcje: przekierowuj tylko użytkowników niebędących administratorami i przekierowuj na dowolny adres URL.

Jeśli jesteś zainteresowany, pobierz wtyczkę z Github => https://github.com/Idearia/wp-redirect-website-to-url .

Opcje

Opcje wtyczek są bardzo proste; na razie są one zakodowane na stałe w pliku wtyczki, ale mogę rozważyć zbudowanie strony opcji, jeśli ludzie tego zażądają:

  • DESTINATION_URL : Pełny adres URL, pod który można przekierowywać użytkowników; może być stroną spoza domeny witryny.
  • DESTINATION_URL_ID : Jeśli adres URL przekierowania jest stroną lub postem WordPress, podaj tutaj jego identyfikator WordPress.
  • USER_CAPABILITY : Użytkownicy z tą funkcją nie zostaną przekierowani; pozostaw puste, aby przekierować wszystkich; domyślnie jest to „manage_options”, które jest włączone dla użytkowników administracyjnych.
  • REDIRECT_STATUS_CODE : Status przekierowania: 302 dla przekierowania tymczasowego, 301 dla przekierowania trwałego.
  • DEBUG : Określa, czy drukować informacje debugowania w pliku debug.log.

Zaktualizowano informacje na stronie Github => https://github.com/Idearia/wp-redirect-website-to-url .

Pamiętaj, że wtyczka jest bardzo prosta; bardziej zaawansowani użytkownicy mogą zamiast tego rozważyć jedną z wielu wtyczek konserwacyjnych dostępnych w repozytorium wtyczek WordPress.org.

Daj mi znać, jeśli masz problem z uruchomieniem wtyczki 😊

Guido Walter Pettinari
źródło
0

Wybrałbym znacznie prostsze rozwiązanie. Zakładam, że chcesz, aby każdy widział tylko jedną stronę - nie ma potrzeby wyświetlania żadnej strony WP - dla każdego żądania dla Twojej domeny.

Dlaczego więc nie utworzyć strony HTML, nadać jej styl CSS i umieścić tę stronę w innym folderze na platformie hostingowej. Upewnij się, że strona wygląda tak, jak chcesz.

Następnie po prostu skieruj domenę do tego nowego folderu. W przypadku większości platform hostingowych możesz określić folder podstawowy domeny. Skieruj więc domenę do tego nowego folderu podstawowego. Nie potrzeba skomplikowanych przekierowań htaccess, wtyczek WP ani specjalnych filtrów, aby podłączyć się do WP.

Lub możesz przenieść całą zawartość z bieżących folderów głównych domeny i umieścić w tym miejscu swój prosty plik HTML.

Miejsca hostingowe mogą mieć także „globalne przekierowanie” dla każdego żądania do dowolnej strony w domenie.

Tak czy inaczej, byłoby prostym rozwiązaniem dla twoich potrzeb posiadania tylko jednej strony dla całej domeny.

Jeśli naprawdę potrzebujesz rozwiązania htaccess, skorzystaj z tego:

RewriteEngine on

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

... zastępując rzeczywistą domenę. Uszczęśliwia również SEO.

Rick Hellewell
źródło