WordPress의 상대 URL


115

워드 프레스에서 이미지, 파일, 링크 등이 상대 URL 대신 절대 URL로 워드 프레스에 삽입된다는 점이 항상 실망 스러웠습니다. 상대 URL은 도메인 이름을 전환하고 http와 https 등을 변경하는 데 훨씬 더 편리합니다. 오늘 나는 상대 URL로 WP_CONTENT_URL을 정의하면 게시물에 파일을 삽입 할 때 절대 URL 대신 src에 상대 URL을 사용한다는 것을 발견했습니다. . 내가 항상 원했던 것! 그러나 공식 WordPress 문서에는 WP_CONTENT_URL을 정의하는 경우 전체 URI 를 사용해야한다고 나와 있습니다.

WordPress 코덱스 말한다 :

WP_CONTENT_URL을이 디렉토리 의 전체 URI (후행 슬래시 없음)로 설정합니다. 예 :

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

상대 URL을 사용할 때 모든 것이 잘 작동하는 것 같습니다.

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

그러나 상대 URI를 사용하는 데 문제가 있습니까? 나는 WordPress가 전체 URI로 정의되어야한다고 말하는 이유가 있어야한다고 생각하고 있습니다.


3
대답은 WP 코드와 사용중인 플러그인 코드에서 모든 사용을 감사하여 그렇지 않은 경우 전체 URL이라고 가정하지 않는지 확인하는 것입니다.하지만 이유는 생각할 수 없습니다. 내 머리 위에서는 괜찮지 않을 것입니다.
Rup

2
이 플러그인 wordpress.org/plugins/relative-url을 사용해 보거나 이것을 읽으면 deluxeblogtips.com/2012/06/relative-urls.html
krishna

5
@Krishna : wp-config에 상대 URL 만 입력 할 수 있다면 플러그인이 필요한 이유는 무엇입니까? 질문의 요점은 wp-config에서 상대 URL을 사용하면 문제가 발생할 수 있는지 알아내는 것입니다.
AidanCurran 2013-08-28

36
워드 프레스를 만져야 할 때 울어요.
Tony Cronin 2014 년

6
@TonyCronin Drupal이 아니라서 행복하세요.
motorbaby

답변:


75

저는 이것이 핵심 개발자 만이 대답 할 수있는 질문이라고 생각합니다. 조사한 결과 핵심 티켓 # 17048 : 브라우저에 전달되는 URL은 루트에 상대적이어야합니다 . 핵심 개발자 인 Andrew Nacin이 설명하는 이유를 찾을 수 있습니다. 그는 또한 이 [wp-hackers] 스레드에 연결 합니다. 두 링크 모두 WP가 상대 URL을 사용하지 않는 이유에 대한 주요 인용문입니다.

핵심 티켓 :

  • 루트 상대 URL은 실제로 적절하지 않습니다. /path/WordPress가 아닐 수도 있고 설치 외부에있을 수도 있습니다. 따라서 실제로 절대 URL과 크게 다르지 않습니다.

  • 또한 상대 URL을 사용하면 설치를 이동할 때 변환을 수행하기가 훨씬 더 어려워집니다. 찾기-바꾸기는 대부분의 상황에서 필요하며 절대 URL을 갖는 것은 이러한 이유로 아이러니하게도 더 이식 가능합니다.

  • 다른 많은 곳에서 절대 URL이 필요합니다. 조건부로 추가해야하는 경우 처리에 추가 될뿐만 아니라 잠재적 인 버그 (및 플러그인과의 비 호환성)가 발생할 수 있습니다.

[wp-hackers] 스레드

  • 워드 프레스가 종종 하위 디렉토리에 있기 때문에 무엇에 비해 확실하지 않습니다. 즉, 콘텐츠를 처리 한 다음 나머지 경로에 추가해야한다는 의미입니다. 이로 인해 오버 헤드가 발생합니다.

  • 맨 앞에 슬래시가 있거나없는 두 가지 유형의 상대 URL이 있음을 유의하십시오. 둘 다 제대로 구현할 수 없도록하는주의 사항이 있습니다.

  • WordPress는 절대 URL을 저장해야합니다. 이를 위해서는 콘텐츠 전처리, 오버 헤드, 모호함이 필요하지 않습니다. 재배치해야하는 경우 데이터베이스에서 전역 찾기-바꾸기입니다.


그리고 개인적인 메모에서, 내가 WP_CONTENT_URL정의 되었을 때 단순히 깨지는 잘못된 코딩 된 테마와 플러그인을 두 번 이상 발견했습니다 .
그들은 이것이 설정 될 수 있다는 것을 모르고 이것이 사실이라고 가정합니다 : WP.URL / wp-content / WhatEver , 항상 그런 것은 아닙니다. 그리고 그 길을 따라 무언가가 깨질 것입니다.


플러그인 상대 URL ( edse 의 답변에 링크 됨 ) 은 액션 후크wp_make_link_relative일련의 필터에template_redirect 함수 를 적용합니다 . 매우 간단한 코드이며 좋은 옵션 인 것 같습니다.


14
좋은 정보. 저는 항상 루트 상대 경로를 사용하여 dev.mysite.com-> qa.mysite.com-> www.mysite.com 또는 www.anothersite.com에 문제없이 배포 할 수 있습니다. WP가이를 염두에두고 설계되지 않은 것은 유감입니다. 설정 WP_CONTENT_URL은 (허용하더라도) 상대 URL을 설정하려는 의도가 아니기 때문에 플러그인이 가장 좋은 옵션 인 것 같습니다. 설정시 플러그인이 중단 WP_CONTENT_URL되지만 플러그인 사용시 정상적으로 작동 하는 테스트 케이스가 있습니까?
Justin

2
상대 경로는로 시작하지 않으며 / 상대 URI (내부 사용 용 <a>)는 http://.
Tulains Córdova

13
Wordpress는 적절한 웹 사이트를위한 것이 아니었고, 상자 밖을 생각하거나 보지 않은 해커가 작성한 빠른 해킹이었습니다. 웹 사이트를 이동할 수있는 유일한 방법은 상대 및 / 또는 루트 상대 URL을 올바르게 사용하는 경우입니다. 절대 URL은이를 절대적으로 방지합니다.
Haqa

8
하위 도메인, 루트 또는 하위 폴더에 살도록 설정할 수있는 사이트를 만들었습니다. 그다지 어렵지 않습니다. 기본적으로 "오래 전에 만들었는데이 변경 사항이 크게 깨져서 고치지 않을 것입니다."라는 이유가있는 것 같습니다.
Donny V.

3
여전히 개발자 이유가 타당하지 않다고 생각합니다. 하드 코딩 된 URL은 상대적인 URL과 동일한 문제를 가지고 있습니다. 원래 개발자가 '나쁜 습관'툴킷에서 가지고있는 또 다른 정말 나쁜 습관 일뿐입니다. 워드 프레스에 많은 URL이 있으므로 제거하기 위해 여러 번 분기되었습니다. 이러한 문제.
Dawesi

15
<?php wp_make_link_relative( $link ) ?>

전체 URL 경로를 상대 경로로 변환합니다.

http 또는 https 프로토콜과 도메인을 제거합니다. 시작 부분에 경로 '/'를 유지하므로 실제 상대 링크가 아니라 웹 루트 기반에서 가져옵니다.

참조 : Wordpress Codex


그리고 그 PHP 스 니펫을 어디에 드롭합니까?
Edward

6

나는 Rup에 동의합니다. 주된 이유는 상대 경로에 대한 혼란을 피하는 것입니다. 나는 wordpress가 상대 경로로 처음부터 작동한다고 생각하지만 여러 플러그인을 사용할 때 문제가 발생할 수 있으며 테마 구성 방법 등이 있습니다.

테스트 서버에서 작업 할 때 상대 경로에이 플러그인을 사용한 적이 있습니다.

루트 상대 URL 모든 URL을 루트 상대 URL로
변환하여 여러 IP에서 동일한 사이트를 호스팅하고, 더 쉬운 프로덕션 마이그레이션 및 더 나은 모바일 장치 테스트를 수행합니다.


5
wp-config 파일에서 하나의 상수를 구성하는 데 필요한 모든 플러그인이 필요한 이유는 무엇입니까? WP_CONTENT_URL친척 만들기의 특정 함정을 피할 수있는 해결책을 제공하고 자체 접근 방식으로 함정에 굴복하지 않는 한. 내가 알고 싶은 것은 WP_CONTENT_URL친척 을 만드는 데 실제로 알려진 함정이 있는지 여부 입니다.
AidanCurran 2013-06-27

1
슬래시로 시작하는 URL 은 상대 경로 /wp-content/some-file.jpg가 아닌 절대 경로입니다. 가능한 혼동이 없습니다. 절대 URL 에 프로토콜과 도메인 이름이 포함되어있어 정당화없이 WordPress를 유용하지 않게 만듭니다. dev에서 스테이징으로 WP 사이트를 배포하려면 데이터베이스 덤프의 도메인 이름에 대해 찾기 및 바꾸기 스크립트를 실행해야합니다. 내가 생각하기에 문제는 그것이 블로그에서 작동하지만 많은 상업용 웹 사이트에서는 작동하지 않는 프로덕션 컨텐츠를 편집하기 위해 설계되었다는 것 입니다.
Ade

1
dude.com/bob/jane과 / bob / jane이 어떻게 헷갈 리나요? #serious #badpractice
Dawesi

1
@Ade, 상대 경로에 대한 숙제를하십시오. 당신은 /wp-content/some-file.jpg절대적인 길에 대해 틀 렸습니다. 나중에 귀하의 의견을 읽는 다른 사람들을 위해 웹 상대 경로는 경로에서 제외 된 프로토콜 및 도메인이있는 경로입니다. 따라서 /wp-content/some-file.jpgwp-content/some-file.jpg둘 다 상대적이며 /첫 번째 예의 선두 는 계정 소유자 또는 서버의 액세스 가능한 루트 디렉토리를 참조하는 목적을 가지고 있습니다.
Pegues

1
@Pegues 좋아요, "절대 URL"이 아닌 "절대 경로"라는 용어를 사용하는 많은 소스 (일부는 SO)를 찾았습니다. "루트 상대"경로라고도합니다. 의미론과 용어는 물론 중요하지만 근본적으로 서로 다르다는 점은 여전히 ​​중요합니다. 내가 알지 못하는 다른 추론이 없다면.
Ade

4

내 사이트에서이 문제를 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);

}

나는 하나의 플러그인의 일부를 가져다가 조각으로 잘라서 만들었습니다. 내 사이트의 모든 링크 (메뉴, CSS, 스크립트 등)를 대체했고 모든 것이 작동했습니다.


0

설정 => 미디어 아래에 '파일의 전체 URL 경로'옵션이 있습니다. 이것을 공백 대신 기본 미디어 디렉토리 경로 '/ wp-content / uploads'로 설정하면 상대 경로 (예 : '/wp-content/uploads/2020/06/document.pdf')가 삽입됩니다.

예를 들어 게시물과 같은 모든 링크를 상대적으로 만드는지 확실하지 않지만 적어도 대부분의 사람들이 걱정하는 미디어를 처리합니다.


이 옵션 '파일의 전체 URL 경로'는 기본적으로 미디어 설정에 나타나지 않습니다. wp-config에 활성화하는 설정이 있습니까?
AidanCurran

@AidanCurran 나는 그것이 오랫동안 거기에 있었다고 확신하지만, 약간의 조사 후에는 WP 3.5+에서 기본적으로 제거 되었기 때문에 결국 이것을 가능하게하는 wp-config가있는 것 같습니다. 다음과 같은 오래된 플러그인을 사용하여 다시 가져올 수 있습니다. wordpress.org/plugins/upload-url-path-enabler 그래서, 거의 설치하지 않았지만 내 플러그인 중 하나가 이것을 다시 추가하고 있다고 생각합니다. 플러그인 Futurio Extra와 함께 Elementor 및 테마 Futurio를 사용하십시오. 나는 변경없이 그들을 비활성화하려고 시도했지만 확실하지 않습니다 : /
포옹

@AidanCurran 다음과 같이 추가 할 수 있습니다. update_option ( 'upload_url_path', '/ wp-content / uploads'); 테마에 대한 functions.php 파일 또는 일부 코드 스 니펫 플러그인을 통해 동일한 효과를 가져야합니다.
포옹

-3

get_home_url ()을 사용해야하며 링크는 절대적이지만 사이트 URL을 변경해도 영향을주지 않습니다.


-4

내가 생각하는 것은 도메인 이름을 변경하는 동안 이전 도메인 이름의 모든 인스턴스를 새 것으로 바꿀 수있는 SQL 덤프 파일입니다. 이 작업을 수행하는 데 도움이되는 플러그인이 없기 때문에 사용할 수있는 유일한 옵션입니다.

이것은 가장 빠른 방법입니다 ..


1
직렬화 된 PHP 문자열에서 도메인 이름도 바꾸고 싶을 것입니다. 이 편리한 검색 및 바꾸기 도구 는 작업을 수행하는 표준 방법 인 것 같습니다 ( 여기에 GitHub 저장소 ). 이것은 내가 capistrano-wp 와 같이 사용하는 Capistrano 배포 솔루션에서 사용되며 매우 잘 작동하는 것 같습니다. 공식 Moving WordPress Codex 페이지 에서도 참조됩니다 .
Matt Gibson

3
이 접근 방식은 지저분하고 오류가 발생하기 쉽습니다. wp-config에서 상대 URL을 사용하여 피할 수 있다면 그렇게 낫지 않습니까? 질문의 요점은 wp-config에서 상대 URL을 사용하면 문제가 발생할 수 있는지 알아내는 것입니다.
AidanCurran 2013-08-28

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.