URL relativi in ​​WordPress


115

Ho sempre trovato frustrante in WordPress che immagini, file, collegamenti, ecc. Siano inseriti in WordPress con un URL assoluto anziché un URL relativo. Un URL relativo è molto più conveniente per cambiare nome di dominio, cambiare tra http e https ecc. Oggi ho scoperto che se definisci WP_CONTENT_URL con un URL relativo, quando inserisci i file nei post usano l'URL relativo per src invece dell'URL assoluto . Proprio quello che ho sempre voluto! Ma la documentazione ufficiale di WordPress dice che dovresti usare un URI completo se stai definendo WP_CONTENT_URL.

Il codice di WordPress dice :

Imposta WP_CONTENT_URL sull'URI completo di questa directory (senza barra finale), ad es

define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');

Tutto sembra funzionare bene quando utilizzo un URL relativo, ad es

define( 'WP_CONTENT_URL', '/my-content-folder');

Ma c'è qualche problema con l'utilizzo di un URI relativo? Sto solo pensando che deve esserci un motivo per WordPress che afferma che dovrebbe essere definito con un URI completo.


3
Immagino che la risposta sia controllare tutti gli usi nel codice WP e nel codice dei plug-in che stai utilizzando per assicurarti che nessuno di loro presuma che sia un URL completo quando non lo è, ma non riesco a pensare a nessun motivo non sarebbe OK dalla parte superiore della mia testa.
Rup

2
prova questo plugin wordpress.org/plugins/relative-url o leggi questo potrebbe aiutarti deluxeblogtips.com/2012/06/relative-urls.html
krishna

5
@Krishna: Perché avremmo bisogno di un plugin se possiamo semplicemente inserire l'URL relativo in wp-config? Il punto della domanda è scoprire se l'utilizzo dell'URL relativo in wp-config può causare un problema.
AidanCurran

36
Piango quando devo toccare wordpress.
Tony Cronin

6
@TonyCronin Sii felice che non sia Drupal.
motorbaby

Risposte:


75

Penso che questo sia il tipo di domanda che solo uno sviluppatore principale potrebbe / dovrebbe rispondere. Ho cercato e trovato il biglietto principale n. 17048: gli URL inviati al browser dovrebbero essere relativi alla radice . Dove possiamo trovare le ragioni spiegate da Andrew Nacin, lead core developer. Si collega anche a questo thread [wp-hackers] . Su entrambi questi collegamenti, queste sono le citazioni chiave sul motivo per cui WP non utilizza URL relativi:

Biglietto principale:

  • Gli URL relativi alla radice non sono realmente appropriati. /path/potrebbe non essere WordPress, potrebbe essere al di fuori dell'installazione. Quindi in realtà non è molto diverso da un URL assoluto.

  • Eventuali URL relativi rendono anche molto più difficile eseguire trasformazioni quando l'installazione viene spostata. Il find-replace sarà necessario nella maggior parte delle situazioni e avere un URL assoluto è ironicamente più portabile per questi motivi.

  • URL assoluti sono necessari in molti altri posti. La necessità di aggiungerli in modo condizionale aumenterà l'elaborazione, oltre a introdurre potenziali bug (e incompatibilità con i plugin).

thread [wp-hackers]

  • Relativamente a cosa, non ne sono sicuro, dato che WordPress si trova spesso in una sottodirectory, il che significa che dovremo sempre elaborare il contenuto per poi aggiungere il resto del percorso. Questo introduce un sovraccarico.

  • Tieni presente che esistono due tipi di URL relativi, con e senza la barra iniziale. Entrambi hanno avvertenze che lo rendono impossibile da implementare correttamente.

  • WordPress dovrebbe (e lo fa) memorizzare URL assoluti. Ciò non richiede pre-elaborazione del contenuto, nessun sovraccarico, nessuna ambiguità. Se è necessario riposizionare, si tratta di una ricerca e sostituzione globale nel database.


E, su una nota personale, più di una volta ho trovato temi e plugin codificati male che semplicemente si rompono quando WP_CONTENT_URLsono definiti.
Loro non sanno questo può essere impostato e si presuppone che questo è vero: / wp-content WP.URL / qualunque cosa , e non è sempre il caso. E qualcosa si romperà lungo la strada.


Il plugin Relative URLs (linkato nella risposta di edse ), applica la funzione wp_make_link_relativein una serie di filtri nell'action hooktemplate_redirect . È un codice abbastanza semplice e sembra una buona opzione.


14
Buone informazioni. Uso sempre i percorsi relativi a root in modo da poter distribuire a dev.mysite.com -> qa.mysite.com -> www.mysite.com o anche www.anothersite.com senza problemi. È un peccato che WP non sia stato progettato con questo in mente. Poiché l'impostazione WP_CONTENT_URLnon sembra essere intesa (anche se consente) l'impostazione di URL relativi, il plugin sembra l'opzione migliore. Esiste un caso di test in cui un plug-in si rompe durante l'impostazione WP_CONTENT_URLma funziona correttamente quando si utilizza il plug-in?
Justin

2
I percorsi relativi non iniziano mai con / e gli URI relativi (da utilizzare all'interno <a>) non iniziano mai con http://.
Tulains Córdova,

13
Wordpress non è mai stato pensato per veri e propri siti web, è sempre stato un hack veloce, scritto da hacker che (chiaramente dalle virgolette qui) non hanno pensato o guardato fuori dagli schemi. L'unico modo per spostare un sito web è se utilizza CORRETTAMENTE URL relativi e / o root relativi. Gli URL assoluti lo impediscono assolutamente.
Haqa

8
Ho creato siti che possono essere configurati per vivere in sottodomini, root o sottocartelle. Non è molto difficile. Sento che ci sono ragioni fondamentalmente dicendo: "L'abbiamo costruito molto tempo fa e questo cambiamento si interromperà troppo, quindi non lo stiamo aggiustando".
Donny V.

3
penso ancora che nessuna delle ragioni degli sviluppatori sia valida. L'URL hardcoded ha gli stessi problemi di uno relativo, è solo un'altra pessima pratica che gli sviluppatori originali hanno nel loro kit di strumenti per le `` cattive abitudini '' ... ce ne sono molti in wordpress, motivo per cui è stato biforcato numerose volte per rimuovere questi problemi.
Dawesi

15
<?php wp_make_link_relative( $link ) ?>

Converti percorsi URL completi in percorsi relativi.

Rimuove i protocolli http o https e il dominio. Mantiene il percorso "/" all'inizio, quindi non è un vero collegamento relativo, ma dalla base della radice web.

Riferimento: Wordpress Codex


e dove metti quel frammento di php?
Edward

6

Sono d'accordo con Rup. Immagino che il motivo principale sia evitare confusione sui percorsi relativi. Penso che wordpress possa funzionare da zero con percorsi relativi, ma il problema potrebbe sorgere quando si utilizzano più plugin, come è configurato il tema ecc.

Una volta ho usato questo plugin per i percorsi relativi, quando lavoravo su server di test:

URL relativi
alla radice Converte tutti gli URL in URL relativi alla radice per ospitare lo stesso sito su più IP, una migrazione di produzione più semplice e un migliore test dei dispositivi mobili.


5
Perché sarebbe necessario un plugin se tutto ciò che serve è configurare una costante nel file wp-config? A meno che non fornisca una soluzione per evitare una particolare trappola di rendersi WP_CONTENT_URLparenti e non soccomba a nessuna trappola con il proprio approccio. Quello che mi piacerebbe sapere è se esiste effettivamente una trappola nota nel fare WP_CONTENT_URLrelativo.
AidanCurran

1
Un URL che inizia con una barra /wp-content/some-file.jpgè un percorso assoluto, non relativo. Non c'è possibile confusione. È l'inclusione del protocollo e del nome di dominio nell'URL assoluto che rende WordPress inutile senza giustificazione. Per distribuire un sito WP dallo sviluppo allo staging fino al live, devo eseguire uno script trova e sostituisci sui nomi di dominio in un dump del database. Il problema penso sia che è progettato per la modifica di contenuti in produzione che funzionano per i blog (che è ciò per cui è fatto) ma non per molti siti Web commerciali.
Ade

1
com'è confuso dude.com/bob/jane vs / bob / jane? #serious #badpractice
Dawesi

1
@ Ade, per favore fai i compiti sui percorsi relativi. Non sei corretto riguardo /wp-content/some-file.jpgall'essere un percorso assoluto. Per gli altri che leggeranno il tuo commento in futuro, tieni presente che un percorso relativo al Web è un percorso il cui protocollo e dominio sono esclusi dal percorso. Pertanto, /wp-content/some-file.jpge wp-content/some-file.jpgsono entrambi relativi, con il /primo esempio nel primo esempio che ha lo scopo di fare riferimento alla directory principale accessibile del titolare dell'account o del server.
Pegues

1
@Pegues OK, ho trovato molte fonti (alcune su SO) usando il termine "percorso assoluto" invece di "url assoluto". Viene anche definito percorso "Root Relative". Sebbene la semantica e la terminologia siano ovviamente importanti, resta il punto che sono fondamentalmente diverse l'una dall'altra: essere relativi alla radice ha tutti i vantaggi di coerenza di un URL assoluto. A meno che non ci sia qualche altro ragionamento di cui non sono a conoscenza.
Ade

4

L'ho risolto nel mio sito rendendolo in functions.php

add_action("template_redirect", "start_buffer");
add_action("shutdown", "end_buffer", 999);

function filter_buffer($buffer) {
    $buffer = replace_insecure_links($buffer);
    return $buffer;
}
function start_buffer(){
    ob_start("filter_buffer");
}

function end_buffer(){
    if (ob_get_length()) ob_end_flush();
}

function replace_insecure_links($str) {

   $str = str_replace ( array("http://www.yoursite.com/", "https://www.yoursite.com/") , array("/", "/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

Ho preso parte a un plugin, l'ho tagliato a pezzi e ho realizzato questo. Ha sostituito TUTTI i collegamenti nel mio sito (menu, CSS, script ecc.) E tutto funzionava.


0

In Impostazioni => Media, c'è un'opzione per "Percorso URL completo per i file". Se lo imposti sul percorso della directory multimediale predefinita "/ wp-content / uploads" anziché vuoto, inserirà percorsi relativi, ad esempio "/wp-content/uploads/2020/06/document.pdf".

Non sono sicuro che renda tutti i collegamenti relativi, ad esempio ai post, ma almeno gestisce i media, che probabilmente è ciò di cui la maggior parte delle persone è preoccupata.


Questa opzione "Percorso URL completo dei file" non viene visualizzata nelle Impostazioni multimediali per impostazione predefinita. C'è qualche impostazione in wp-config che lo attiva?
AidanCurran

@AidanCurran Sono abbastanza sicuro che sia lì da molto tempo, ma dopo alcune ricerche sembra che ci sia un po 'di wp-config che lo abilita dopo tutto, perché è stato rimosso per impostazione predefinita da WP 3.5+. Può essere ripristinato usando un vecchio plugin come: wordpress.org/plugins/upload-url-path-enabler Quindi, immagino che uno dei miei plugin lo stia aggiungendo di nuovo, anche se ne ho installato a malapena uno. Basta usare Elementor e il tema Futurio con il plugin Futurio Extra. Ho provato a disabilitarli senza alcuna modifica, quindi non sono sicuro: /
abbraccia il

@AidanCurran Potresti aggiungere qualcosa come: update_option ('upload_url_path', '/ wp-content / uploads'); nel tuo file functions.php per il tema o attraverso qualche plugin per frammenti di codice, e dovrebbe avere lo stesso effetto.
abbraccio il

-3

dovrebbe usare get_home_url (), quindi i tuoi link sono assoluti, ma non ha effetto se cambi l'URL del sito


-4

Quello che penso che tu faccia è mentre cambi i nomi di dominio, il file di dump sql che hai puoi sostituire tutte le istanze del vecchio nome di dominio con uno nuovo. Questa è l'unica opzione disponibile in quanto non ci sono plugin che ti aiuteranno a farlo.

Questo è il modo più veloce ..


1
Tieni presente che vorrai anche sostituire il nome di dominio nelle stringhe PHP serializzate. Questo pratico strumento di ricerca e sostituzione sembra essere il modo standard di fare le cose (repository GitHub qui ). Questo è utilizzato dalle soluzioni di distribuzione Capistrano che uso come capistrano-wp e sembra funzionare molto bene. È anche referenziato nella pagina ufficiale del Moving WordPress Codex .
Matt Gibson

3
Questo approccio è disordinato e soggetto a errori. Se possiamo evitarlo utilizzando URL relativi in ​​wp-config, non è molto meglio? Il punto della domanda è scoprire se l'utilizzo dell'URL relativo in wp-config può causare un problema.
AidanCurran

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.