Apache2-301 URL의 디렉토리 끝에“/”가 없으면 리디렉션


13

끝에 슬래시 ( "/")없이 이와 같은 URL을 요청할 때이 Redirect (301)를 실제로 보지 못했습니다. http://server/directory

서버는 Location 헤더가로 지정된 301 Redirect Permanent 헤더로 응답합니다 http://server/directory/.

이 라이브 예제를 참조하십시오 :

사용자 요청 :

GET /social HTTP/1.1
( http://192.168.1.111/social )

아파치 서버 응답 :

HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/

사용자 요청 :

GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )

아파치 서버 응답 :

HTTP/1.1 200 OK

아파치 access.log :

192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"

/ social / 디렉토리에는 index.html파일이 있습니다.

아파치 소프트웨어 : Apache/2.2.22 (Ubuntu)
디렉토리 옵션 :Options Indexes FollowSymLinks MultiViews

그래서 내 질문은 : 아파치가 왜 이것을하고 있습니까? 리디렉션을 방지하고 index.html직접 보내는 방법은 무엇입니까? 클라이언트는 실제로 불필요한 두 가지 요청을 보내야합니다. 클라이언트 중 일부는 리디렉션을 허용하지 않으며 슬래시 ( "/")가 없으면 사이트로 이동할 수 없습니다.

리디렉션을 사용 중지하고 싶지 않습니다. 서버가 리디렉션없이 직접 응답을 보내지 않기를 원합니다. 요청하는 경우에도 /social.

아파치는 이러한 요청을 리디렉션하도록 설계 되었습니까? 서버는 리디렉션하지 않고 데이터를 보낼 수 있습니다. mod_rewrite이것을 막기 위해 사용해야 합니까? 아니면 다른 구성? 아니면 그냥 이렇게 놔두고 모든 HTML 링크 끝에 슬래시를 추가하고 리디렉션을해야합니까?

너희들은 어떻게 생각하니?


이 기능을 사용하지 않으려는 이유를 분명히해야한다고 생각합니다. 리디렉션의 유일한 대안 /social은 예제에서 404로 응답하는 것 입니다.
Håkan Lindqvist

비활성화하지 않고 리디렉션을 방지합니다. 서버가 index.html리디렉션없이 출력하기 를
원합니다

"this"는 잘못된 URL에서 올바른 URL로 리디렉션하는 정상적인 동작을 말합니다. 예를 들어에서 콘텐츠를 제공하는 것이 좋지 않은 이유 중 일부는 @kasperd의 답변을 참조하십시오 /social. (또한 일반적으로 여러 URL에서 동일한 콘텐츠를 제공하는 것은 바람직하지 않습니다.)
Håkan Lindqvist

답변:


10

리디렉션없이 데이터를 보내면 상대 링크가 끊어집니다. 가 http://server/directory포함 된 경우 file전체 URL은입니다 http://server/directory/file. 기본 URL이 인 경우 와 같이 지정된 링크 <a href="file">가 가리 키지 만 기본 URL 만있는 경우 대신 의도 한 결과가 아닌 링크를 가리 킵니다 .http://server/directory/filehttp://server/directory/http://server/directoryhttp://server/file

Apache는 경로 재 지정 대신 URL에 따라 두 가지 다른 방식으로 디렉토리 목록을 생성 할 수 있습니다. 그러나 index.html디렉토리에 파일 이 있으면 작동하지 않습니다 . 대신 아파치는 두 가지 경우 모두 작동하는 접근 방식을 사용합니다.

이것은 10 년 전 아파치가 같은 방식으로 동작하는 새로운 행동이 아닙니다. 리디렉션을 처리 할 수없는 클라이언트가 수정되었습니다. 그러나 리디렉션을 처리 할 수없는 클라이언트의 경우 Apache는 대신 따라갈 수있는 링크가있는 작은 html 파일을 보내야합니다.


이것은 질문에 대답하지 않습니다. 상대 링크가 손상 될 수 있습니다. 그러나 누군가 슬래시없이 경로에 대한 컨텐츠를 제공하려는 경우 POST 요청이 웹 서비스에 전송 될 때와 같이 해당 내용에 대한 경고가있을 수 있습니다. 웹 서비스에 상대 링크가 없으며 리디렉션으로 인해 POST 본문이 손실됩니다.
dr fu manchu

9

mod_dir이 리디렉션을 추가하고 DirectorySlash Off지시문으로 비활성화 할 수 있습니다 .

그러나 후행 슬래시 리디렉션을 비활성화하면 일부 페이지가 손상 될 수 있습니다. 반환되는 페이지에 상대 링크가 포함 된 경우 페이지가 후행 슬래시없이 제공되면 해당 URL이 다르게 해석됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.