developer tip

WordPress의 상대 URL

optionbox 2020. 9. 4. 07:10
반응형

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

}

I took part of one plugin, cut it into pieces and make this. It replaced ALL links in my site (menus, css, scripts etc.) and everything was working.


should use get_home_url(), then your links are absolute, but it does not affect if you change the site url


What i think you do is while you change domain names, the sql dump file that you have you can replace all instances of old domain name with new one. This is only option available as there are no plugins that will help you do this.

This is quickest way ..


There is an easy way

Instead of /pagename/ use index.php/pagename/ or if you don't use permalinks do the following :

Post

index.php?p=123

Page

index.php?page_id=42

Category

index.php?cat=7

More information here : http://codex.wordpress.org/Linking_Posts_Pages_and_Categories

참고URL : https://stackoverflow.com/questions/17187437/relative-urls-in-wordpress

반응형