[wordpress] WordPress의 상대 URL

워드 프레스에서 이미지, 파일, 링크 등이 상대 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로 정의되어야한다고 말하는 이유가 있어야한다고 생각하고 있습니다.



답변

저는 이것이 핵심 개발자 만이 대답 할 수있는 질문이라고 생각합니다. 조사한 결과 핵심 티켓 # 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 함수 를 적용합니다 . 매우 간단한 코드이며 좋은 옵션 인 것 같습니다.


답변

<?php wp_make_link_relative( $link ) ?>

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

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

참조 : WordPress Codex


답변

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

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

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


답변

내 사이트에서이 문제를 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, 스크립트 등)를 대체했고 모든 것이 작동했습니다.


답변

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

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


답변

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


답변

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

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