prosource

WordPress의 상대 URL

probook 2023. 3. 19. 18:19
반응형

WordPress의 상대 URL

WordPress에서는 이미지, 파일, 링크 등이 상대 URL이 아닌 절대 URL로 삽입되는 것이 항상 불만스러웠습니다.상대 URL은 도메인 이름 전환, http와 https 간 변경 등에 훨씬 편리합니다.WP_CONTENT_URL을 상대 URL로 정의하면 파일을 투고에 삽입할 때 절대 URL 대신 src의 상대 URL이 사용된다는 것을 오늘 알게 되었습니다.바로 내가 항상 원했던 거야!그러나 WP_CONTENT_URL을 정의하는 경우 WordPress 공식 문서에는 완전한 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는 WordPress를 사용합니다.절대URL과 .

  • 또한 관련 URL을 사용하면 설치 이동 시 변환을 수행하는 것이 훨씬 더 어려워집니다.대부분의 경우 Find-Replace가 필요하며, 아이러니하게도 이러한 이유로 절대 URL을 사용하는 것이 더 휴대성이 높습니다.

  • 다른 많은 장소에서는 절대 URL이 필요합니다.이것들을 조건부로 추가할 필요가 있을 뿐만 아니라 잠재적인 버그(및 플러그인과의 비호환성)가 발생할 수 있습니다.

[wp-timeout] 스레드

  • WordPress는 서브디렉토리에 있는 경우가 많기 때문에 항상 콘텐츠를 처리하여 나머지 경로에 추가해야 합니다.이로 인해 오버헤드가 발생합니다.

  • 상대 URL에는 선두 슬래시가 있는 경우와 없는 경우의 2종류가 있습니다.둘 다 이 문제를 적절히 구현할 수 없게 만드는 경고를 가지고 있습니다.

  • WordPress는 절대 URL을 저장해야 합니다.이를 위해서는 콘텐츠의 전처리, 오버헤드, 애매모호함이 필요하지 않습니다.재배치할 필요가 있는 경우 데이터베이스의 글로벌 검색 치환입니다.


그리고 개인적으로 주제와 플러그인이 제대로 정의되지 않은 코드를 여러 번 발견했습니다.
그들은 이것이 설정될 수 있다는 것을 모르고 이것이 사실이라고 가정한다: WP.URL/wp-content/WhatEver, 항상 그렇지는 않습니다.그리고 그 과정에서 무언가가 부서질 것이다.


플러그인 Relative URL(edse's Answer에 링크됨)은 액션훅에 있는 일련의 필터에 함수를 적용합니다.이것은 꽤 간단한 코드이며 좋은 옵션인 것 같습니다.

<?php wp_make_link_relative( $link ) ?>

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

http 또는 https 프로토콜과 도메인을 제거합니다.'/' 경로를 웹 루트 기반에서 실제 상대 링크가 아닌 상태로 유지합니다.

레퍼런스:워드프레스 코덱스

제 사이트에서 이걸 기능적으로 만들어서 풀었어요.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
모든 URL을 루트 상대 URL로 변환하여 여러 IP에서 동일한 사이트를 호스트하고 운영 환경의 이행이 용이하며 모바일 디바이스 테스트가 향상됩니다.

Settings = > Media(설정 > 미디어) 아래에 'Full URL-path for files(파일 전체 URL 경로)' 옵션이 있습니다.공백 대신 기본 미디어 디렉터리 경로 '/wp-content/uploads'로 설정하면 '/wp-content/uploads/2020/06/document.pdf'와 같은 상대 경로가 삽입됩니다.

모든 링크를 포스트에 상대적인 것으로 할지는 모르겠지만, 적어도 미디어를 취급하고 있기 때문에, 대부분의 사람들이 걱정하고 있을 것입니다.

도메인 이름을 변경할 때 가지고 있는 SQL 덤프 파일을 이전 도메인 이름의 모든 인스턴스를 새 이름으로 바꿀 수 있습니다.이 작업을 수행하는 데 도움이 되는 플러그인이 없으므로 이 옵션만 사용할 수 있습니다.

이것이 가장 빠른 방법이다.

언급URL : https://stackoverflow.com/questions/17187437/relative-urls-in-wordpress

반응형