Redirecționează întregul site către o singură pagină

20 dec. 2012, 23:30:14
Vizualizări: 22.4K
Voturi: 11

Am nevoie să redirecționez un întreg site WordPress către o singură pagină WordPress. Este un fel de mod de mentenanță, dar redirecționarea trebuie să ducă către o pagină WordPress publicată. Din păcate, pagina de mentenanță pe care trebuie să o afișez necesită utilizarea altor plugin-uri WordPress.

Nu cunosc niciun plugin pentru Modul de Mentenanță care să permită acest lucru. În cel mai bun caz, acestea permit doar scrierea de cod HTML/CSS personalizat.

M-am gândit la o regulă mod_rewrite în .htaccess. Cu toate acestea, nu mă pricep foarte bine la mod_rewrite.

În primul rând, am dezactivat redirecționările canonice.

Apoi, am încercat să folosesc:

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

Cu toate acestea, aceste reguli generează bucle de redirecționare. page_id=813 este ID-ul paginii mele de mentenanță, bineînțeles.

Știe cineva vreun plugin pentru modul de mentenanță care redirecționează către o pagină publicată?

Alternativ, mă poate ajuta cineva să corectez regulile mod_rewrite? Ar fi și mai bine dacă putem exclude /wp-admin din regulile de redirecționare.

0
Toate răspunsurile la întrebare 3
2
16

Puteți face acest lucru direct din WordPress, în loc să folosiți o soluție confuză și inutil de complexă în fișierul .htaccess.

Putem folosi filtrul template_redirect, care se activează doar în partea publică a site-ului (nu în wp-admin). Apoi folosim funcția is_page() pentru a verifica dacă vizualizăm pagina cu ID-ul 813. Dacă nu, redirecționăm către acea pagină folosind funcția 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;
} );

Această soluție funcționează excelent pentru un mod de întreținere, deoarece redirecționarea se face cu antetul HTTP 302 'temporar', informând roboții și motoarele de căutare că site-ul va fi disponibil în curând. Cu toate acestea, dacă mutați site-ul permanent, ați putea dori să folosiți antetul HTTP 301 'permanent' pentru redirecționare. Puteți face acest lucru adăugând un al doilea parametru funcției wp_redirect. Exemplu:

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 dec. 2012 01:12:10
Comentarii

Acest lucru funcționează excelent și pentru scopul meu. Cu excepția faptului că adaug o modificare - site-ul este "închis" definitiv și vreau să mențin WordPress funcțional, afișând pagina de rămas bun ca pagină principală. Există vreo modalitate de a adăuga un header 301 la acest tip de redirecționare pentru SEO?

Tapefreak Tapefreak
24 mai 2013 04:42:14

@Tapefreak Poți seta header-ul HTTP ca al doilea parametru al funcției wp_redirect. Exemplu: wp_redirect( home_url( 'index.php?page_id=183' ), 301 );

shea shea
24 mai 2013 06:30:39
0

Am încorporat răspunsul acceptat de @shea într-un plugin într-un singur fișier și am adăugat două opțiuni: redirecționare doar pentru utilizatorii non-administratori și redirecționare către o URL arbitrară.

Dacă sunteți interesat, nu ezitați să descărcați pluginul de pe Github => https://github.com/Idearia/wp-redirect-website-to-url.

Opțiuni

Opțiunile pluginului sunt foarte simple; pentru moment, acestea sunt hard-codate în fișierul pluginului, dar aș putea lua în considerare crearea unei pagini de opțiuni dacă există solicitări:

  • DESTINATION_URL: URL-ul complet unde să redirecționați utilizatorii; poate fi o pagină în afara domeniului site-ului.
  • DESTINATION_URL_ID: Dacă URL-ul de redirecționare este o pagină sau un articol WordPress, specificați aici ID-ul său WordPress.
  • USER_CAPABILITY: Utilizatorii cu această capacitate nu vor fi redirecționați; lăsați gol pentru a redirecționa pe toată lumea; implicit este 'manage_options' care este activat pentru utilizatorii administrator.
  • REDIRECT_STATUS_CODE: Stare de redirecționare: 302 pentru redirecționare temporară, 301 pentru redirecționare permanentă.
  • DEBUG: Dacă să afișeze informații de depanare în debug.log.

Informații actualizate pe pagina Github => https://github.com/Idearia/wp-redirect-website-to-url.

Rețineți că pluginul este foarte simplu; utilizatorii mai avansați ar putea lua în considerare unul dintre numeroasele pluginuri de întreținere disponibile în depozitul de pluginuri WordPress.org.

Anunțați-mă dacă întâmpinați probleme la rularea pluginului.

11 iul. 2018 20:43:07
0

Aș opta pentru o soluție mult mai simplă. Presupun că vrei ca oricine să vadă doar o singură pagină - nu este nevoie ca nicio pagină WP să fie vizibilă - pentru orice cerere pe domeniul tău.

Deci, de ce să nu creezi o pagină HTML, să o stilizezi cu niște CSS și să plasezi acea pagină într-un alt folder pe platforma de hosting. Asigură-te că pagina arată așa cum dorești.

Apoi, pur și simplu direcționează domeniul tău către noul folder. Cu majoritatea platformelor de hosting, poți specifica folderul de bază al unui domeniu. Deci, direcționează domeniul tău către noul folder de bază. Nu este nevoie de redirectări complicate în htaccess, de plugin-uri WP sau de filtre speciale pentru a te conecta la WP.

Sau, ai putea muta tot conținutul din folderul(rul) rădăcină actual al domeniului și să plasezi fișierul tău HTML simplu în locul lui.

Multe platforme de hosting au și o 'redirectare globală' pentru orice cerere către orice pagină de pe domeniul tău.

În oricare dintre aceste moduri, ar fi o soluție simplă pentru nevoia ta de a avea o singură pagină pentru întregul domeniu.

Dacă chiar vrei o soluție în htaccess, folosește aceasta:

RewriteEngine on

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

...înlocuind cu domeniul tău real. Asta va face și SEO-ul fericit.

25 sept. 2018 09:33:56