Apache2 - 301 Chuyển hướng khi bị thiếu / xuất hiện ở cuối thư mục trong url


13

Tôi thực sự không nhận thấy Chuyển hướng này (301) khi yêu cầu một url như thế này mà không gạch chéo ("/") ở cuối: http://server/directory

Máy chủ sẽ hoạt động với tiêu đề Thường trực chuyển hướng 301 với tiêu đề Vị trí được định vị http://server/directory/.

Xem ví dụ trực tiếp này:

Yêu cầu người dùng:

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

Máy chủ Apache bị từ chối:

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

Yêu cầu người dùng:

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

Máy chủ Apache bị từ chối:

HTTP/1.1 200 OK

Truy cập Apache.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"

Thư mục / social / chứa một index.htmltập tin.

Phần mềm Apache: Apache/2.2.22 (Ubuntu)
Tùy chọn thư mục:Options Indexes FollowSymLinks MultiViews

Vì vậy, câu hỏi của tôi là: Tại sao apache làm điều này? Và làm thế nào để ngăn chặn chuyển hướng và gửi index.htmltrực tiếp? Khách hàng phải gửi hai yêu cầu thực sự không cần thiết. Và có thể một số khách hàng không cho phép Chuyển hướng và sẽ không thể truy cập trang web mà không có dấu gạch chéo ("/").

Tôi không muốn tắt chuyển hướng. Tôi sẽ không gửi máy chủ để gửi phản hồi trực tiếp mà không có bất kỳ chuyển hướng nào. Ngay cả khi yêu cầu /social.

Là apache được thiết kế để chuyển hướng những yêu cầu đó? Máy chủ chỉ có thể gửi dữ liệu mà không cần chuyển hướng, phải không? Tôi có nên sử dụng mod_rewriteđể ngăn chặn điều này? Hoặc cấu hình khác? Hoặc tôi chỉ nên để nó như thế này và thêm một dấu gạch chéo ở cuối tất cả các liên kết html và sống với một số chuyển hướng?

các bạn nghĩ sao?


Tôi nghĩ bạn sẽ phải làm rõ lý do tại sao bạn muốn vô hiệu hóa điều này. Sự thay thế lành mạnh duy nhất cho chuyển hướng sẽ là phản hồi với 404 /socialtrong ví dụ của bạn.
Håkan Lindqvist

Tôi không muốn vô hiệu hóa nó, chỉ ngăn chặn chuyển hướng. Tôi muốn máy chủ xuất ra index.htmlmà không cần chuyển hướng
Jonathan Gurebo

Bởi "này" tôi đã đề cập đến hành vi bình thường với một chuyển hướng từ url không chính xác đến url chính xác. Xem câu trả lời từ @kasperd để biết một số lý do tại sao việc phục vụ nội dung từ đó là một ý tưởng tồi /social. (Ngoài ra, nói chung, việc phục vụ cùng một nội dung ở nhiều url thường không được mong muốn.)
Håkan Lindqvist

Câu trả lời:


10

Gửi dữ liệu mà không có chuyển hướng sẽ phá vỡ các liên kết tương đối. Nếu http://server/directorycó chứa file, thì URL đầy đủ cho điều đó sẽ là http://server/directory/file. Một liên kết được chỉ định như <a href="file">sẽ trỏ đến http://server/directory/filenếu URL cơ sở là http://server/directory/, nhưng nếu URL cơ sở chỉ là http://server/directorynó sẽ trỏ đến http://server/filethay vào đó, đó không phải là kết quả dự định.

Apache có thể đã tạo danh sách thư mục theo hai cách khác nhau tùy thuộc vào URL thay vì chuyển hướng. Tuy nhiên, nó sẽ không hoạt động nếu có một index.htmltập tin trong thư mục. Vì vậy, thay vì Apache đang sử dụng cách tiếp cận, nó hoạt động trong cả hai trường hợp.

Đây không phải là một hành vi mới, một thập kỷ trước Apache đã hành xử giống như vậy. Bây giờ khách hàng không thể xử lý chuyển hướng nên đã được sửa. Nhưng đối với bất kỳ máy khách nào không thể xử lý chuyển hướng, Apache nên gửi cùng một tệp html nhỏ với một liên kết có thể được theo dõi thay thế.


Điều này không trả lời câu hỏi. Đó là chính xác, các liên kết tương đối có thể bị hỏng. Nhưng nếu ai đó muốn phân phối nội dung cho một đường dẫn mà không có dấu gạch chéo, thì họ có thể có các giá trị lại cho điều đó, ví dụ như khi yêu cầu POST được gửi đến dịch vụ web. Không có liên kết tương đối trong dịch vụ web và chuyển hướng sẽ khiến phần thân POST bị mất.
dr fu manchu

9

mod_dirthêm chuyển hướng này và bạn có thể vô hiệu hóa nó bằng một lệnh DirectorySlash Off.

Tuy nhiên, lưu ý rằng việc vô hiệu hóa chuyển hướng dấu gạch chéo có thể khiến một số trang bị hỏng. Nếu trang được trả về chứa các liên kết tương đối, thì các URL đó sẽ giải quyết khác nếu trang được phục vụ mà không có dấu gạch chéo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.