URL Relatif di WordPress


115

Saya selalu merasa frustasi di WordPress karena gambar, file, tautan, dll. Dimasukkan ke WordPress dengan URL absolut, bukan URL relatif. Sebuah url relatif jauh lebih nyaman untuk mengganti nama domain, mengubah antara http dan https dll. Hari ini saya menemukan bahwa jika Anda mendefinisikan WP_CONTENT_URL dengan url relatif maka ketika Anda memasukkan file ke dalam posting mereka menggunakan url relatif untuk src daripada url absolut . Hanya apa yang selalu kuinginkan! Tetapi dokumentasi resmi WordPress mengatakan bahwa Anda harus menggunakan URI lengkap jika Anda mendefinisikan WP_CONTENT_URL.

Kodeks WordPress mengatakan :

Setel WP_CONTENT_URL ke URI lengkap direktori ini (tanpa garis miring), mis

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

Semuanya tampak berfungsi dengan baik saat saya menggunakan URL relatif, mis

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

Tetapi apakah ada masalah dengan menggunakan URI relatif? Saya hanya berpikir pasti ada alasan untuk WordPress yang menyatakan bahwa itu harus didefinisikan dengan URI lengkap.


3
Saya kira jawabannya adalah mengaudit semua penggunaannya dalam kode WP dan dalam kode plugin yang Anda gunakan untuk memastikan tidak ada dari mereka yang menganggap itu adalah URL lengkap padahal bukan, tetapi saya tidak dapat memikirkan alasan apa pun. itu tidak akan OK di atas kepalaku.
Rup


5
@Krishna: Mengapa kita membutuhkan plugin jika kita bisa memasukkan URL relatif di wp-config? Inti dari pertanyaannya adalah untuk mengetahui apakah menggunakan URL relatif di wp-config dapat menyebabkan masalah.
AidanCurran

36
Saya menangis ketika saya harus menyentuh wordpress.
Tony Cronin

6
@TonyCinin Berbahagialah itu bukan Drupal.
bayi laki

Jawaban:


75

Saya pikir ini adalah jenis pertanyaan yang hanya bisa / harus dijawab oleh pengembang inti. Saya telah meneliti dan menemukan tiket inti # 17048: URL yang dikirim ke browser harus relatif root . Di mana kami dapat menemukan alasan yang dijelaskan oleh Andrew Nacin, pengembang inti utama. Dia juga menautkan ke utas [wp-hackers] ini . Di kedua tautan tersebut, berikut adalah kutipan utama mengapa WP tidak menggunakan URL relatif:

Tiket inti:

  • URL relatif root tidak terlalu tepat. /path/mungkin bukan WordPress, mungkin di luar pemasangan. Jadi sebenarnya ini tidak jauh berbeda dengan URL absolut.

  • URL relatif apa pun juga membuatnya jauh lebih sulit untuk melakukan transformasi saat penginstalan dipindahkan. Find-replace akan diperlukan dalam banyak situasi, dan ironisnya memiliki URL absolut lebih portabel karena alasan tersebut.

  • URL absolut dibutuhkan di banyak tempat lain. Perlu menambahkan ini secara bersyarat akan menambah pemrosesan, serta memperkenalkan potensi bug (dan ketidakcocokan dengan plugin).

utas [wp-hackers]

  • Sehubungan dengan apa, saya tidak yakin, karena WordPress sering kali berada dalam subdirektori, yang berarti kita akan selalu perlu memproses konten untuk kemudian menambahkan di jalur lainnya. Ini memperkenalkan overhead.

  • Perlu diingat bahwa ada dua jenis URL relatif, dengan dan tanpa garis miring di awal. Keduanya memiliki peringatan yang membuat hal ini tidak mungkin diterapkan dengan benar.

  • WordPress harus (dan memang) menyimpan URL absolut. Ini tidak memerlukan pra-pemrosesan konten, tidak ada overhead, tidak ada ambiguitas. Jika Anda perlu merelokasi, ini adalah pencarian-ganti global dalam database.


Dan, pada catatan pribadi, lebih dari sekali saya menemukan tema dan plugin memiliki kode buruk yang hanya rusak saat WP_CONTENT_URLditentukan.
Mereka tidak tahu ini dapat diatur dan menganggap bahwa ini benar: WP.URL / wp-content / WhatEver , dan tidak selalu demikian. Dan sesuatu akan rusak di sepanjang jalan.


URL Relatif plugin (ditautkan dalam Jawaban edse ), menerapkan fungsi wp_make_link_relativedalam serangkaian filter di hook aksitemplate_redirect . Ini kode yang cukup sederhana dan sepertinya merupakan opsi yang bagus.


14
Info bagus. Saya selalu menggunakan jalur root-relative sehingga saya dapat menerapkan ke dev.mysite.com -> qa.mysite.com -> www.mysite.com atau bahkan www.anothersite.com tanpa masalah. Sayangnya WP tidak dirancang dengan pemikiran itu. Karena pengaturan WP_CONTENT_URLtampaknya tidak dimaksudkan untuk (meskipun memungkinkan) pengaturan url relatif, plugin tampaknya merupakan pilihan terbaik. Apakah ada kasus pengujian di mana plugin rusak saat menyetel WP_CONTENT_URLtetapi berfungsi dengan baik saat menggunakan plugin?
Justin

2
Jalur relatif tidak pernah dimulai dengan / dan URI relatif (untuk digunakan di dalam <a>) tidak pernah dimulai http://.
Tulains Córdova

13
Wordpress tidak pernah dimaksudkan untuk situs web yang tepat, itu selalu merupakan peretasan cepat, ditulis oleh peretas yang (jelas dari kutipan di sini) belum berpikir atau melihat ke luar kotak. Satu-satunya cara Anda dapat memindahkan situs web adalah jika dengan BENAR menggunakan URL relatif dan / atau akar relatif. URL mutlak benar-benar mencegahnya.
Haqa

8
Saya telah membuat situs yang dapat diatur untuk ditempatkan di sub-domain, root atau sub folder. Ini tidak terlalu sulit. Saya merasa ada alasan yang pada dasarnya mengatakan "Kami membangun ini sejak lama dan perubahan ini akan merusak banyak sehingga kami tidak memperbaikinya."
Donny V.

3
masih berpikir tidak ada alasan pengembang yang valid. Url kode keras memiliki masalah yang sama dengan yang relatif, itu hanyalah praktik yang sangat buruk yang dimiliki pengembang asli dalam toolkit 'kebiasaan buruk' mereka ... ada banyak dari mereka di wordpress yang mengapa itu telah bercabang berkali-kali untuk dihapus masalah ini.
Dawesi

15
<?php wp_make_link_relative( $link ) ?>

Ubah jalur URL lengkap menjadi jalur relatif.

Menghapus protokol http atau https dan domain. Pertahankan jalur '/' di awal, jadi ini bukan tautan relatif yang sebenarnya, tetapi dari basis root web.

Referensi: Wordpress Codex


dan di mana Anda meletakkan potongan php itu?
Edward

6

Saya setuju dengan Rup. Saya kira alasan utamanya adalah untuk menghindari kebingungan pada jalur relatif. Saya pikir wordpress dapat bekerja dari awal dengan jalur relatif tetapi masalahnya mungkin muncul saat menggunakan banyak plugin, bagaimana tema dikonfigurasi, dll.

Saya pernah menggunakan plugin ini untuk jalur relatif, saat bekerja pada server pengujian:

URL Relatif Root
Mengonversi semua URL menjadi URL relatif root untuk menghosting situs yang sama di beberapa IP, migrasi produksi yang lebih mudah, dan pengujian perangkat seluler yang lebih baik.


5
Mengapa plugin bahkan diperlukan jika yang diperlukan hanyalah mengkonfigurasi satu konstanta di file wp-config? Kecuali itu memberikan solusi untuk menghindari jebakan tertentu dalam membuat WP_CONTENT_URLkerabat dan tidak menyerah pada jebakan apa pun dengan pendekatannya sendiri. Yang ingin saya ketahui adalah apakah sebenarnya ada kesalahan dalam membuat WP_CONTENT_URLkerabat.
AidanCurran

1
URL yang diawali dengan garis miring /wp-content/some-file.jpgadalah jalur absolut, bukan jalur relatif. Tidak ada kemungkinan kebingungan. Ini adalah penyertaan protokol dan nama domain di URL absolut yang membuat WordPress tidak membantu tanpa alasan. Untuk menyebarkan situs WP dari dev ke pementasan untuk hidup, saya harus menjalankan skrip temukan-dan-ganti pada nama domain di dump database. Masalahnya menurut saya adalah bahwa itu dirancang untuk mengedit konten dalam produksi yang berfungsi untuk blog (untuk itulah dibuat) tetapi tidak untuk banyak situs web komersial.
Ade

1
bagaimana dude.com/bob/jane vs / bob / jane membingungkan? #serious #badpractice
Dawesi

1
@Ade, tolong kerjakan pekerjaan rumah Anda di jalur yang relatif. Anda salah tentang /wp-content/some-file.jpgmenjadi jalan absolut. Untuk orang lain yang membaca komentar Anda di masa mendatang, harap perhatikan bahwa jalur relatif web adalah jalur yang protokol dan domainnya dikecualikan dari jalur tersebut. Jadi, /wp-content/some-file.jpgdan wp-content/some-file.jpgkeduanya relatif, dengan petunjuk /pada contoh pertama memegang tujuan untuk mereferensikan direktori root yang dapat diakses dari pemegang akun atau server.
Pegues

1
@Pegues OK, saya menemukan banyak sumber (beberapa di SO) menggunakan istilah "jalur absolut" sebagai lawan dari "url absolut". Ini juga disebut sebagai jalur "Root Relative". Meskipun semantik dan terminologi tentu saja penting, intinya tetap bahwa keduanya secara fundamental berbeda satu sama lain. Relatif terhadap root memiliki semua manfaat konsistensi dari url absolut. Kecuali ada alasan lain yang tidak saya sadari.
Ade

4

Saya menyelesaikannya di situs saya membuat ini di 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);

}

Saya mengambil bagian dari satu plugin, memotongnya menjadi beberapa bagian dan membuatnya. Itu menggantikan SEMUA tautan di situs saya (menu, css, skrip, dll.) Dan semuanya berfungsi.


0

Di bawah Pengaturan => Media, ada opsi untuk 'Jalur URL lengkap untuk file'. Jika Anda menyetel ini ke jalur direktori media default '/ wp-content / uploads' alih-alih kosong, ini akan memasukkan jalur relatif misalnya '/wp-content/uploads/2020/06/document.pdf'.

Saya tidak yakin apakah itu membuat semua tautan relatif, misalnya untuk posting, tapi setidaknya itu menangani media, yang mungkin paling dikhawatirkan orang.


Opsi 'Path URL lengkap ke file' ini tidak muncul di Pengaturan Media secara default. Apakah ada beberapa pengaturan di wp-config yang mengaktifkannya?
AidanCurran

@AidanCurran Saya cukup yakin ini sudah ada sejak lama, tetapi setelah beberapa penelitian tampaknya ada beberapa wp-config yang mengaktifkannya, karena itu dihapus secara default dari WP 3.5+. Itu dapat dibawa kembali menggunakan plugin lama seperti: wordpress.org/plugins/upload-url-path-enabler Jadi, saya kira salah satu plugin saya menambahkan ini kembali, meskipun saya hampir tidak menginstalnya. Hanya menggunakan Elementor dan tema Futurio dengan plugin Futurio Extra. Saya mencoba menonaktifkannya tanpa perubahan apa pun, jadi tidak yakin: /
peluk

@AidanCurran Anda dapat menambahkan sesuatu seperti: update_option ('upload_url_path', '/ wp-content / uploads'); di file functions.php Anda untuk tema atau melalui beberapa plugin cuplikan kode, dan itu harus memiliki efek yang sama.
peluk

-3

harus menggunakan get_home_url (), maka link Anda bersifat absolut, tetapi tidak berpengaruh jika Anda mengubah url situs


-4

Apa yang saya pikir Anda lakukan adalah saat Anda mengubah nama domain, file dump sql yang Anda miliki, Anda dapat mengganti semua contoh nama domain lama dengan yang baru. Ini hanya opsi yang tersedia karena tidak ada plugin yang akan membantu Anda melakukan ini.

Ini cara tercepat ..


1
Ingatlah Anda juga ingin mengganti nama domain dalam string PHP serial. Alat pencarian dan ganti yang praktis ini tampaknya menjadi cara standar untuk melakukan sesuatu (repositori GitHub di sini ). Ini digunakan oleh solusi penyebaran Capistrano yang saya gunakan seperti capistrano-wp dan tampaknya bekerja dengan sangat baik. Itu juga direferensikan di halaman resmi Moving WordPress Codex .
Matt Gibson

3
Pendekatan ini berantakan dan rawan kesalahan. Jika kita dapat menghindarinya dengan menggunakan URL relatif di wp-config, bukankah itu jauh lebih baik? Inti dari pertanyaannya adalah untuk mengetahui apakah menggunakan URL relatif di wp-config dapat menyebabkan masalah.
AidanCurran

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.