WordPress'teki göreli URL'ler


115

WordPress'te resimlerin, dosyaların, bağlantıların vb. Göreli URL yerine mutlak bir URL ile WordPress'e eklenmesini her zaman sinir bozucu bulmuşumdur. Göreli bir url, etki alanı adlarını değiştirmek, http ve https arasında değiştirmek vb. İçin çok daha kullanışlıdır. Bugün, WP_CONTENT_URL'yi göreli bir url ile tanımlarsanız, dosyaları gönderilere eklediğinizde, mutlak url yerine src için göreli url'yi kullandıklarını keşfettim. . Her zaman istediğim şey! Ancak resmi WordPress belgeleri, WP_CONTENT_URL'yi tanımlıyorsanız tam bir URI kullanmanız gerektiğini söylüyor .

WordPress kodeksi diyor ki :

WP_CONTENT_URL'yi bu dizinin tam URI'sine ayarlayın (eğik çizgi yok), örn.

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

Göreli bir URL kullandığımda her şey yolunda görünüyor, örneğin

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

Ancak göreli bir URI kullanmanın bir sorunu var mı? Sadece WordPress'in tam bir URI ile tanımlanması gerektiğini belirten bir neden olması gerektiğini düşünüyorum.


3
Sanırım cevap, WP kodundaki ve kullandığınız eklentilerin kodundaki tüm kullanımlarını denetlemek, bunların hiçbirinin tam URL olmadığında bunun tam URL olduğunu varsaymadığından emin olmaktır, ancak herhangi bir neden düşünemiyorum. aklımın ucundan bile geçmez.
Rup


5
@Krishna: wp-config'e göreli URL girebiliyorsak neden bir eklentiye ihtiyacımız olsun? Sorunun amacı, wp-config'de göreli URL kullanmanın bir soruna neden olup olmayacağını bulmaktır.
AidanCurran

36
WordPress'e dokunmam gerektiğinde ağlıyorum.
Tony Cronin

6
@TonyCronin Mutlu olun, Drupal değil.
motorbaby

Yanıtlar:


75

Bence bu, yalnızca çekirdek bir geliştiricinin yanıtlayabileceği / yanıtlaması gereken türden bir soru. 17048 numaralı ana bileti araştırdım ve buldum: Tarayıcıya teslim edilen URL'ler kök temelli olmalıdır . Baş çekirdek geliştirici Andrew Nacin tarafından açıklanan nedenleri nerede bulabiliriz. Ayrıca bu [wp-hackerlar] dizisine de bağlantı veriyor . Bu bağlantıların her ikisinde de, WP'nin neden göreceli URL'ler kullanmadığına dair temel alıntılar şunlardır:

Temel bilet:

  • Köke bağlı URL'ler gerçekten uygun değildir. /path/WordPress olmayabilir, kurulumun dışında olabilir. Yani gerçekten mutlak bir URL'den çok da farklı değil.

  • Herhangi bir göreli URL, yükleme taşındığında dönüşüm gerçekleştirmeyi önemli ölçüde zorlaştırır. Bul-değiştir çoğu durumda gerekli olacaktır ve mutlak bir URL'ye sahip olmak bu nedenlerden dolayı ironik bir şekilde daha taşınabilirdir.

  • Diğer birçok yerde mutlak URL'lere ihtiyaç vardır. Bunları koşullu olarak eklemeye ihtiyaç duymak, işlemeye katkıda bulunmanın yanı sıra olası hataları (ve eklentilerle uyumsuzlukları) ortaya çıkaracaktır.

[wp-hackerlar] ileti dizisi

  • Neye göre, emin değilim, çünkü WordPress genellikle bir alt dizinde bulunur, bu da içeriği daha sonra yolun geri kalanına eklemek için her zaman işlememiz gerektiği anlamına gelir. Bu, yükü getirir.

  • Başta eğik çizgi olan ve olmayan iki tür göreli URL olduğunu unutmayın. Her ikisinde de, bunun düzgün bir şekilde uygulanmasını imkansız kılan uyarılar vardır.

  • WordPress mutlak URL'leri saklamalıdır (ve saklamalıdır). Bu, içeriğin önceden işlenmesini, ek yükü, belirsizliği gerektirmez. Taşınmanız gerekirse, bu, veritabanında global bir bul-değiştirdir.


Ve kişisel bir notta, defalarca WP_CONTENT_URL, tanımlandığında basitçe kırılan kötü kodlanmış tema ve eklentiler buldum .
Onlar bilmiyorum bu ayarlanabilir ve bunun doğru olduğunu varsayalım: WP.URL / wp-content / Whatever ve her zaman böyle değil. Ve yol boyunca bir şey kırılacak.


Relative URLs eklentisi ( edse 's Answer'da bağlantılıdır ), işlevi eylem kancasındakiwp_make_link_relative bir dizi filtredetemplate_redirect uygular . Oldukça basit bir kod ve hoş bir seçenek gibi görünüyor.


14
İyi bilgi. Dev.mysite.com -> qa.mysite.com -> www.mysite.com veya hatta www.anothersite.com'a sorunsuz bir şekilde konuşlandırabilmek için her zaman kökü temel alan yolları kullanırım. WP'nin bu düşünceyle tasarlanmamış olması talihsiz bir durum. Ayar WP_CONTENT_URL, göreli url'leri ayarlamak için (izin verse bile) amaçlanmadığından, eklenti en iyi seçenek gibi görünüyor. Kurulum sırasında bir eklentinin bozulduğu WP_CONTENT_URLancak eklentiyi kullanırken iyi çalıştığı bir test durumu var mı ?
Justin

2
Göreli yollar asla ile başlamaz / ve göreli URI'ler (içeride kullanım için <a>) asla ile başlamaz http://.
Tulains Córdova

13
Wordpress hiçbir zaman uygun web siteleri için tasarlanmadı, her zaman hızlı bir hack'ti, (buradaki alıntılardan açıkça anlaşılıyor) düşünmemiş veya kutunun dışına bakmamış hackerlar tarafından yazılmıştır. Bir web sitesini taşımanın tek yolu, göreli ve / veya kök göreceli URL'leri DOĞRU bir şekilde kullanmasıdır. Mutlak URL'ler bunu kesinlikle engeller.
Haqa

8
Alt alanlarda, kök veya alt klasörde yaşayacak şekilde kurulabilen siteler oluşturdum. Çok zor değil. Temelde "Bunu uzun zaman önce inşa ettik ve bu değişiklik çok fazla kırılacak, bu yüzden düzeltmeyeceğiz" diyorlar gibi hissediyorum.
Donny V.

3
hala geliştiricilerin nedenlerinin hiçbirinin geçerli olmadığını düşünüyor. Sabit kodlu url, göreceli bir URL ile aynı sorunlara sahip, bu sadece orijinal geliştiricilerin 'kötü alışkanlıkları' araç setinde sahip oldukları gerçekten kötü bir uygulama ... bu sorunlar.
Dawesi

15
<?php wp_make_link_relative( $link ) ?>

Tam URL yollarını göreli yollara dönüştürün.

Http veya https protokollerini ve etki alanını kaldırır. Başlangıçta '/' yolunu tutar, bu nedenle bu gerçek bir bağıl bağlantı değil, web kök tabanından gelir.

Referans: Wordpress Codex


ve bu php parçacığını nereye bırakacaksınız?
Edward

6

Rup'a katılıyorum. Sanırım ana sebep göreceli yollarda kafa karışıklığını önlemek. Bence wordpress göreceli yollarla sıfırdan çalışabilir, ancak sorun birden fazla eklenti kullanıldığında, temanın nasıl yapılandırıldığı vb.

Bir zamanlar bu eklentiyi sunucuları test ederken çalışırken göreli yollar için kullandım:

Kök Göreli URL'ler Aynı siteyi birden çok IP'de barındırmak, daha kolay üretim geçişi ve daha iyi mobil cihaz testi için tüm URL'leri köke göre URL'lere
dönüştürür.


5
Tek gereken wp-config dosyasında bir sabit yapılandırmaksa neden bir eklenti gerekli olsun ki? WP_CONTENT_URLGöreli olmanın belirli bir tuzağından kaçınmak için bir çözüm sağlamadığı ve kendi yaklaşımıyla herhangi bir tuzağa boyun eğmediği sürece. Bilmek istediğim şey, WP_CONTENT_URLakraba kurmanın bilinen bir tuzağının olup olmadığıdır .
AidanCurran

1
Eğik çizgi ile başlayan bir URL /wp-content/some-file.jpg, göreli bir yol değil , mutlak bir yoldur. Olası bir kafa karışıklığı yok. WordPress'i gerekçe göstermeden yararsız kılan , protokolün ve alan adının mutlak URL'ye eklenmesi . Bir WP sitesini geliştirmeden aşamalandırmaya ve canlıya dağıtmak için, bir veritabanı dökümündeki etki alanı adlarında bul ve değiştir komut dosyası çalıştırmam gerekiyor. Sanırım sorun , bloglar için işe yarayan (bunun için yapıldı), ancak birçok ticari web sitesi için değil , üretimdeki içeriği düzenlemek için tasarlanmış olmasıdır .
Ade

1
dude.com/bob/jane ile / bob / jane arasında nasıl kafa karıştırıcı? # ciddi #badpractice
Dawesi

1
@Ade, lütfen ödevinizi göreceli yollarla yapın. Yaklaşık yanlıştır /wp-content/some-file.jpgbir absolulte yolu olmak. İleride yorumunuzu okuyacak olanlar için, lütfen web ile ilişkili yolun, protokol ve etki alanının yoldan hariç tutulduğu bir yol olduğunu unutmayın. Bu nedenle, /wp-content/some-file.jpgve wp-content/some-file.jpgher ikisi de görelidir, /ilk örnekteki baştaki, hesap sahibinin veya sunucunun erişilebilir kök dizinine başvurma amacını taşır.
Pegues

1
@Pegues Tamam, "mutlak url" yerine "mutlak yol" terimini kullanan birçok kaynak (bazıları SO'da) buldum. Aynı zamanda "Kök Göreli" yol olarak da anılır. Anlambilim ve terminoloji elbette önemli olsa da, asıl mesele, birbirlerinden temelde farklı olduklarıdır. Köke göre olmak, mutlak bir URL'nin tüm tutarlılık avantajlarına sahiptir. Farkında olmadığım başka bir sebep yoksa.
Ade

4

Sitemde bunu functions.php'de yaparak çözdüm

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);

}

Bir eklentinin parçası oldum, parçalara böldüm ve bunu yaptım. Sitemdeki TÜM bağlantıları (menüler, css, komut dosyaları vb.) Değiştirdi ve her şey çalışıyordu.


0

Ayarlar => Medya altında, 'Dosyalar için tam URL-yolu' seçeneği vardır. Bunu boş yerine varsayılan medya dizini yolu '/ wp-content / uploads' olarak ayarlarsanız, göreli yollar ekler, örneğin '/wp-content/uploads/2020/06/document.pdf'.

Tüm bağlantıları, örneğin gönderilere göre mi yaptığından emin değilim, ama en azından medyayı işliyor, ki bu muhtemelen çoğu insanın endişelendiği şey.


Bu seçenek 'Dosyaların tam URL yolu' varsayılan olarak Medya Ayarlarında görünmez. Wp-config'de onu etkinleştiren bir ayar var mı?
AidanCurran

@AidanCurran Uzun süredir orada olduğundan oldukça eminim, ancak bazı araştırmalardan sonra bunu sağlayan bazı wp-config var gibi görünüyor, çünkü WP 3.5+ varsayılan olarak kaldırıldı. Bu, wordpress.org/plugins/upload-url-path-enabler gibi eski bir eklenti kullanılarak geri getirilebilir. Yani, sanırım eklentilerimden biri, neredeyse hiç kurulmamış olsa da, bunu geri ekliyor. Sadece Elementor ve Futurio temasını kullanarak Futurio Extra eklentisi. Onları herhangi bir değişiklik yapmadan devre dışı bırakmayı denedim, bu yüzden emin değilim: /
sarılın

@AidanCurran Şuna benzer bir şey ekleyebilirsiniz: update_option ('upload_url_path', '/ wp-content / uploads'); tema için functions.php dosyanızda veya bazı kod parçacığı eklentileri aracılığıyla olsa da, aynı etkiye sahip olmalıdır.
sarılmak

-3

get_home_url () kullanmalısınız, bu durumda bağlantılarınız mutlaktır, ancak site url'sini değiştirirseniz bu etkilenmez


-4

Alan adlarını değiştirirken yaptığınızı düşündüğüm şey, sahip olduğunuz sql dökümü dosyası eski alan adının tüm örneklerini yenisiyle değiştirebilirsiniz. Bu, bunu yapmanıza yardımcı olacak hiçbir eklenti olmadığı için yalnızca seçenektir.

Bu en hızlı yoldur ..


1
Ayrıca, serileştirilmiş PHP dizelerindeki alan adını da değiştirmek isteyeceğinizi unutmayın. Bu kullanışlı arama ve değiştirme aracı , işleri yapmanın standart yolu gibi görünüyor (GitHub deposu burada ). Bu, capistrano-wp gibi kullandığım Capistrano dağıtım çözümleri tarafından kullanılıyor ve çok iyi çalışıyor gibi görünüyor. Ayrıca, resmi Hareketli WordPress Kodeksi sayfasında da referans gösterilmektedir .
Matt Gibson

3
Bu yaklaşım dağınıktır ve hataya açıktır. Wp-config'de göreli URL'leri kullanarak bunu önleyebilirsek, bu çok daha iyi değil mi? Sorunun amacı, wp-config'de göreli URL kullanmanın bir soruna neden olup olmayacağını bulmaktır.
AidanCurran

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.