문제

PHP와 정규식을 사용하여 작은 스크립트를 프로그래밍하고 있습니다.

이 스크립트의 목표는 페이지에서 모든 링크를 추출하고 이러한 링크를 상대적 일 때 절대로 변환하는 것입니다.

이 페이지가 있다고 가정 해 봅시다 http://www.example.com/xxx1/xxx2/xxx3.html이 페이지에 다음 링크가있는 경우

index.html --- 절대 링크가 될 것입니다 http://www.example.com/xxx1/xxx2/index.html

./index.html --- 절대 링크가 될 것입니다 http://www.example.com/xxx1/xxx2/index.html

../index.html --- 절대 링크가 될 것입니다 http://www.example.com/xxx1/index.html

/index.html --- 절대 링크가 될 것입니다 http://www.example.com/index.html

그래서

index.html = 현재 디렉토리에서 열립니다

./index.html =도 현재 디렉토리에서 열립니다

../index.html = 부모 디렉토리에서 열립니다

/index.html = 루트 디렉토리에서 열립니다

문제는 URL이 검색 엔진 친화적 인 경우 어떻게됩니까?

이 URL이 있다고 가정 해 봅시다

((Case1)) : http://www.example.com/xxx1/xxx2/xxx3/index/

또는

((Case2)) : http://www.example.com/xxx1/xxx2/xxx3/index

Case1의 "index"는 디렉토리 또는 페이지입니까? case2 또는 페이지의 디렉토리입니까? 그리고 다음 링크가 어떻게 어떻게 보일지, 두 경우 모두 1과 2 모두에서 절대 링크로 보입니다.

index.html ---?

./index.html ---?

../index.html ---?

/index.html ---?

그것이 당신 중 일부에게 쉬운 질문인지 확실하지 않지만 나에게는 혼란 스럽습니까?

감사 :)

도움이 되었습니까?

해결책

당신의 예에 대한 직접적인 답

~ 안에 사례 1, index URL의 "디렉토리 구성 요소"입니다. 사례 2 index URL의 "파일 구성 요소"입니다. 이는 실제로 웹 서버의 일반 파일 또는 디렉토리인지 여부와 무관합니다. 아래 설명을 참조하십시오. 해당 URL의 서버에서 HTML 페이지를 제공하는 경우 두 가지 모두 "페이지"라고 호출합니다.

Case 1: (링크에서 http://www.example.com/xxx1/xxx2/xxx3/index/)

  1. index.html -> http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  2. ./index.html -> http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  3. ../index.html -> http://www.example.com/xxx1/xxx2/xxx3/index.html
  4. /index.html -> http://www.example.com/index.html

Case 2: (링크에서 http://www.example.com/xxx1/xxx2/xxx3/index)

  1. index.html -> http://www.example.com/xxx1/xxx2/xxx3/index.html
  2. ./index.html -> http://www.example.com/xxx1/xxx2/xxx3/index.html
  3. ../index.html -> http://www.example.com/xxx1/xxx2/index.html
  4. /index.html -> http://www.example.com/index.html

따라서 동일하게 유지되는 유일한 것은 절대 링크입니다 -4.

설명

링크는 브라우저가있는 URL과 관련이 있으며 원래 입력 한 URL (예 : HTTP 리디렉션)이 아닐 수도 있습니다. 대부분의 웹 브라우저는 링크를 따르거나 리디렉션되면 현재 주소로 URL 막대를 업데이트합니다. 방금 편집하지 않으면 계산 된 주소가 있습니다.

슬래시로 끝나는 URL은 디렉토리를 참조하는 것으로 간주됩니다 ( RFC2396 Uri Syntax의 경우 실제로는 그렇게 호출하지는 않지만 디렉토리 내의 파일을 참조하는 것으로 간주됩니다.

-측 참고 : 파일 시스템 경로 (하나가있는 경우) 파일 서버에서 파일을 제공하는 데 사용하는 유형에 해당하는 것은 아닙니다. 대부분의 웹 서버는 파일 시스템의 디렉토리에 대한 URL 매핑을 요청하면 일부 이름 (종종 index.html, 선택이 일반적으로 구성 될 수 있음) 또는 HTML 디렉토리 목록이있는 디렉토리 내의 파일을 제공합니다. 서버 (또는 비활성화 된 경우 액세스 오류)에 의해. 후행 슬래시가없는 비슷한 경로에 대한 "파일 URL"이 요청 될 때 일반적으로 동일하게 제공됩니다.이 경우 "파일 URL"은 실제로 디렉토리 파일 시스템 경로에 맵핑됩니다.--

이것은 "파일 URL"이있는 위의 예와 같은 불일치로 이어질 수 있습니다. http://www.example.com/xxx1/xxx2/xxx3/index 아마도 "디렉토리 URL"과 동일합니다. http://www.example.com/xxx1/xxx2/xxx3/index/, 그러나 상대 링크는이 두 URL과 다른 경로를 지칭 할 수 있으며, 하나는 작동하고 다른 하나는 깨질 수 있습니다.

이러한 이유로 디렉토리에 링크 할 때는 항상 "디렉토리 URL"(종료 슬래시 포함)을 사용하는 것이 좋습니다. http://www.ietf.org/meetings/ 그리고 아닙니다 http://www.ietf.org/meetings 둘 다 같은 페이지를 제공하더라도. 많은 웹 서버는 실제로 HTTP 301 리디렉션 응답을 사용하여 후자를 전자에게 요청하는 클라이언트를 리디렉션하도록 구성됩니다. 브라우저의 URL 막대에 후자를 입력하면이를 볼 수 있습니다. URL 막대는 응답을 받으면 전자로 변경됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top