Disabilitare l'auto completamento degli URL in WordPress

24 mar 2013, 04:59:48
Visualizzazioni: 28.3K
Voti: 21

Ho notato recentemente che WordPress cerca di auto-completare un URL quando non viene inserito nella sua interezza. Ad esempio, ho un URL di un articolo che appare così:

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

Se navigo al seguente URL:

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

Posso vedere che l'URL viene inviato a WordPress ma WordPress effettua un reindirizzamento 301 verso http://www.mysite.com/some-post-title.

Come posso disabilitare questo comportamento?

1
Commenti

Una soluzione testata che non disabilita l'intero sistema degli URL canonici ma solo la parte di "indovinare" automaticamente è descritta qui

Hauke P. Hauke P.
20 mag 2014 17:56:32
Tutte le risposte alla domanda 4
3
28

Credo che sia la funzione redirect_canonical collegata a template_redirect. Potresti disabilitarla con:

remove_filter('template_redirect', 'redirect_canonical'); 

Ma dovresti davvero valutare se vuoi farlo poiché è piuttosto complessa e svolge alcune importanti funzioni SEO:

Reindirizza i link in entrata all'URL corretto in base all'URL del sito.

I motori di ricerca considerano www.somedomain.com e somedomain.com come due URL diversi quando entrambi puntano alla stessa posizione. Questo miglioramento SEO evita penalizzazioni per contenuti duplicati reindirizzando tutti i link in entrata verso uno o l'altro.

Previene il reindirizzamento per feed, trackback, ricerche, popup di commenti, e URL di amministrazione. Non reindirizza su IIS 7 che non supporta permalink ottimizzati, anteprime di pagine/post, amministrazione di WP, Trackback, robots.txt, ricerche, o su richieste POST.

Cercherà anche di trovare il link corretto quando un utente inserisce un URL che non esiste basandosi sulla query esatta di WordPress. Proverà invece a analizzare l'URL o la query nel tentativo di individuare la pagina corretta a cui andare.

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

Il seguente codice potrebbe disabilitare l'autocompletamento senza interferire con il componente SEO, ma non posso garantirlo. Il codice è stato testato pochissimo poiché non ho mai avuto la necessità di disabilitare questa funzione. Dovrei studiare approfonditamente redirect_canonical per essere sicuro di qualsiasi cosa.

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
Commenti

Ho aggiunto questo snippet di codice alla fine del mio file /wp-includes/canonical.php e i reindirizzamenti continuano a verificarsi. Sto facendo qualcosa di sbagliato? Qualcun altro non riesce a disabilitare questo comportamento?

user1380540 user1380540
4 giu 2019 19:34:12

@user1380540 non si modificano i file core. Questo codice dovrebbe essere inserito nel functions.php del tema o in un plugin.

Michael Rogers Michael Rogers
16 lug 2020 21:45:39

un altro motivo per cui ho un rapporto di amore/odio con WordPress

JJS JJS
21 lug 2023 18:25:37
0

Sembra estremamente irresponsabile che questo "indovinare" avvenga automaticamente. Sarei molto più aperto all'idea se ci fosse un modo per definire quale sia la pagina corretta a cui indirizzare.

Ho numerose pagine costruite come una sequenza, e questo auto-indovinare sta scegliendo erroneamente di rispondere con pagine che si trovano (casualmente?) da qualche parte nella sequenza, invece della pagina iniziale.

AGGIORNAMENTO: Questo è un comportamento noto, e viene preso in considerazione qui: https://core.trac.wordpress.org/ticket/16557

28 lug 2014 16:51:16
0

Come seguito alla risposta di FitPM - è stato creato un plugin che disabilita il comportamento di auto-indovinamento degli URL.

Funziona correttamente per me su WordPress 4.8 al 2 agosto 2017. Il plugin è disponibile qui: https://wordpress.org/plugins/disable-url-autocorrect-guessing/

2 ago 2017 21:03:50
1

Una nota: Se si disabilita redirect_canonical (ad esempio con remove_action('template_redirect', 'redirect_canonical');), anche link casuali come https://tld.com/stringa-casuale/articolo funzioneranno (verrà mostrato il contenuto di https://tld.com/slug-categoria-reale/articolo).

Se vuoi evitare questo comportamento e restituire un errore 404 per questi URL casuali, usa qualcosa come:

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 mag 2020 03:04:30
Commenti

puoi semplificarlo con $url = home_url( $_SERVER['REQUEST_URI'] );

Saif Saif
25 dic 2021 08:32:39