2012-11-06 2 views
0

일부 웹 크롤링을 시도하고 슬래시를 추가할지 여부를 결정할 때가 왔습니다. 일부 사이트에는 마지막에 사이트가 있고 일부 브라우저에는 잘못된 URL을 입력하면 제대로 된 사이트로 리디렉션된다는 것을 알고 있습니다. 정규화는 끝에 슬래시를 추가하지만 상대 URL을 절대로 변환하려고하면 문제가 발생합니다.URL 끝에 슬래시가 있어야합니다.

사용자가 절대 URL http://stack.com/more하지만 실제 (리다이렉트) URL이 http://stack.com/more/이고 상대 URL 그럼 URL newurl = new URL(url, relativeURL);

수율 http://stack.com/index.html (비 존재하지 않는 페이지)

index.html

인을 선택하면, 예를 들어

실제로해야 할 때 http://stack.com/more/index.html (실제 페이지)

Doese 누구든지 좋은 방법을 알고 있습니다. 끝에 슬래시를 올바르게 추가 하시겠습니까?

답변

4

상대 URL이 /으로 시작하는 경우에만 루트 (도메인)와 관련됩니다. 그래서 모두

http://stack.com/more/ + /index.html

http://stack.com/more + /index.html

가 제대로 해결

http://stack.com/index.html

에 아닌 예에서

http://stack.com/more/index.html

, 그것은 더 differenc하지 않습니다 e more 끝에 /이 있는지 여부는 무엇이든간에

트릭은 상대 URL에 슬래시가없는 경우에 발생합니다. index.html. 이들을 해결할 때 마지막 세그먼트를 제거하고이를 상대 경로로 대체해야합니다.

http://stack.com/more/ + index.html

http://stack.com/index.html

http://stack.com/more/index.html

하지만

http://stack.com/more + index.html

해결에 해결하기 때문에 그것은,이 경우의 차이를 만들 것 (index.html는을 대체, more이 최종 세그먼트이기 때문에).

+0

예를 들어, 상대 URL에 /가 처음에는 없기 때문에 미안하다. URL에 /가 있어야하는지 잘 모릅니다. 올바른 URL을 결정하는 전략이 있습니까? 귀하의 경우,'http : // stack.com/more/index.html' – Dan

+0

@Dan :'http : // stack.com/more' +'index.html'은 올바르게'http://stack.com입니다./index.html'이 아니라'http : // stack.com/more/index.html'을 참조하십시오. 나는 그것들을 결합하는 방법을 알 수있는 유일한 방법은 당신이 처음 것의 표준 형태를 가지는지 확인하는 것입니다. 사이트가'http : // stack '에 응답하면.com/more'를'http : // stack.com/more /'로 리디렉션하면'index.html'을 추가하는 것이'http : // stack.com/more/index.html'이어야합니다. 'http : // stack.com/more'에 직접 응답하면'index.html'을 추가하는 것은'http : // stack.com/index.html'이어야합니다. –