Dezactivare completare automată URL în WordPress

24 mar. 2013, 04:59:48
Vizualizări: 28.3K
Voturi: 21

Recent am observat că WordPress încearcă să completeze automat un URL când acesta nu este transmis în întregime. De exemplu, am un URL de articol care arată astfel:

http://www.mysite.com/some-post-title

Dacă navighez către următorul URL:

http://www.mysite.com/some-post-ti

Pot observa că URL-ul este transmis către WordPress, dar WordPress face o redirecționare 301 către http://www.mysite.com/some-post-title.

Cum pot dezactiva acest comportament?

1
Comentarii

O soluție testată care nu dezactivează întregul sistem de URL-uri canonice, ci doar partea de autocompletare „ghicire” este prezentată aici

Hauke P. Hauke P.
20 mai 2014 17:56:32
Toate răspunsurile la întrebare 4
3
28

Cred că este funcția redirect_canonical atașată la template_redirect. O poți dezactiva cu:

remove_filter('template_redirect', 'redirect_canonical'); 

Dar ar trebui să te gândești bine dacă vrei să faci asta, deoarece este destul de complexă și îndeplinește niște funcții importante pentru SEO:

Redirecționează linkurile primite către URL-ul corect bazat pe adresa site-ului.

Motoarele de căutare consideră www.somedomain.com și somedomain.com ca fiind două URL-uri diferite, chiar dacă duc ambele la aceeași locație. Această îmbunătățire SEO previne penalizările pentru conținut duplicat prin redirecționarea tuturor linkurilor primite către una sau alta variantă.

Previne redirecționarea pentru fluxuri, trackbacks, căutări, popup-uri de comentarii și URL-uri de administrare. Nu redirecționează pe IIS 7 care nu suportă permalink-uri frumoase, previzualizări de pagini/postări, administrarea WP, Trackbacks, robots.txt, căutări sau la cereri POST.

De asemenea, va încerca să găsească linkul corect când un utilizator introduce un URL care nu există, bazându-se pe interogarea exactă WordPress. În schimb, va încerca să analizeze URL-ul sau interogarea pentru a determina pagina corectă către care să navigheze.

http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/canonical.php#L13

Următorul cod ar putea opri completarea automată fără a afecta componenta SEO, dar nu pot promite asta. Codul este testat minimal deoarece nu am avut niciodată nevoie să dezactivez această funcționalitate. Ar trebui să studiez redirect_canonical pentru a fi sigur de orice.

function kill_404_redirect_wpse_92103() {
  if (is_404()) {
   add_action('redirect_canonical','__return_false');
  }
}
add_action('template_redirect','kill_404_redirect_wpse_92103',1);
24 mar. 2013 05:49:04
Comentarii

Am adăugat acest fragment de cod la sfârșitul fișierului meu /wp-includes/canonical.php și redirecționările încă se întâmplă. Fac ceva greșit? Mai este cineva care nu poate dezactiva acest comportament?

user1380540 user1380540
4 iun. 2019 19:34:12

@user1380540 nu editezi fișierele de nucleu. acest cod ar trebui să fie adăugat în functions.php al temei sau într-un plugin.

Michael Rogers Michael Rogers
16 iul. 2020 21:45:39

încă un motiv pentru care am o relație de dragoste/ură cu WordPress

JJS JJS
21 iul. 2023 18:25:37
0

Pare extrem de iresponsabil să se facă această "ghicire" automat. Aș fi mult mai deschis la idee dacă ar exista vreun mijloc de a defini care este pagina corectă spre care să se direcționeze.

Am numeroase pagini construite ca o secvență, iar această ghicire automată alege în mod incorect să răspundă cu pagini care sunt (la întâmplare?) undeva în secvență, în loc de pagina de început.

ACTUALIZARE: Acest comportament este cunoscut și este luat în considerare aici: https://core.trac.wordpress.org/ticket/16557

28 iul. 2014 16:51:16
0

Ca un răspuns complementar la soluția lui FitPM - a fost creat un plugin care dezactivează funcționalitatea de ghicire automată.

Funcționează corect pentru mine pe WordPress 4.8 la data de 2 august 2017. Plugin-ul se găsește aici: https://wordpress.org/plugins/disable-url-autocorrect-guessing/

2 aug. 2017 21:03:50
1

O notă importantă: Dacă dezactivezi redirect_canonical (de exemplu cu remove_action('template_redirect', 'redirect_canonical');), atunci linkuri aleatorii precum https://tld.com/some-random-string/blogpost vor funcționa (afișând conținutul de la https://tld.com/real-category-slug/blogpost).

Dacă dorești să împiedici acest comportament și să returnezi eroarea 404 pentru astfel de URL-uri aleatoare, poți folosi următorul cod:

add_filter( 'redirect_canonical', function( $redirect_url ) {
    $url = 'http'.((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'s':'').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    if( $redirect_url !== $url ) {
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        nocache_headers();
    }
    return false; 
});
13 mai 2020 03:04:30
Comentarii

puteți simplifica folosind $url = home_url( $_SERVER['REQUEST_URI'] );

Saif Saif
25 dec. 2021 08:32:39