Tôi sử dụng chức năng API nào để chuyển hướng đến các URL bên ngoài?


21

Khi viết một mô-đun, để chuyển hướng đến các đường dẫn Drupal, người ta sử dụng drupal_goto.

Có một số chức năng API mà tôi nên sử dụng để chuyển hướng đến các trang bên ngoài không? Hoặc là thiết lập Locationvới drupal_set_headercon đường để đi?

PS Tôi phải làm một số xử lý theo yêu cầu; mod_rewrite/ mod_aliasở cấp độ Apache hoặc Path redirectmô-đun Drupal , không giải quyết vấn đề của tôi.

Câu trả lời:


25

Bạn nên sử dụng drupal_goto () cho các chuyển hướng bên trong và bên ngoài.

Sử dụng tùy chọn 'bên ngoài' để chuyển hướng bên ngoài: drupal_goto($url, array('external' => TRUE));

drupal_goto ($ path = '', mảng $ tùy chọn = mảng (), $ http_response_code = 302)

$ tùy chọn: (tùy chọn) Một mảng kết hợp của các tùy chọn bổ sung, với các yếu tố sau:

  • 'truy vấn' : Một mảng các cặp khóa / giá trị truy vấn (không có bất kỳ mã hóa URL nào) để nối vào URL.
  • 'Fragment' : Một mã định danh phân đoạn (tên neo) để nối vào URL. Không bao gồm ký tự '#' hàng đầu.
  • 'tuyệt đối' : Mặc định là SAI. Có bắt buộc đầu ra là một liên kết tuyệt đối hay không (bắt đầu bằng http :). Hữu ích cho các liên kết sẽ được hiển thị bên ngoài trang web, chẳng hạn như trong nguồn cấp dữ liệu RSS.
  • 'bí danh' : Mặc định cho FALSE. Cho dù đường dẫn đã cho là một bí danh URL.
  • 'bên ngoài' : Liệu đường dẫn đã cho có phải là URL bên ngoài hay không.
  • 'ngôn ngữ' : Một đối tượng ngôn ngữ tùy chọn. Nếu đường dẫn được liên kết đến bên trong trang web, $ tùy chọn ['ngôn ngữ'] được sử dụng để tra cứu bí danh cho URL. Nếu $ tùy chọn ['ngôn ngữ'] bị bỏ qua, toàn cầu $ ngôn ngữ_url sẽ được sử dụng.
  • 'Https' : Liệu URL này có nên trỏ đến một vị trí an toàn hay không. Nếu không được xác định, lược đồ hiện tại được sử dụng, do đó người dùng vẫn ở trên HTTP hoặc HTTPS tương ứng. TRUE thi hành HTTPS và FALSE thi hành HTTP, nhưng HTTPS chỉ có thể được thi hành khi biến 'https' được đặt thành TRUE.
  • 'base_url' : Chỉ được sử dụng nội bộ, để sửa đổi URL cơ sở khi URL phụ thuộc ngôn ngữ yêu cầu như vậy.
  • 'Tiền tố' : Chỉ được sử dụng nội bộ, để sửa đổi đường dẫn khi URL phụ thuộc ngôn ngữ yêu cầu như vậy.
  • 'script' : Tên tệp script trong thư mục gốc của Drupal sẽ sử dụng khi URL sạch bị vô hiệu hóa, chẳng hạn như 'index.php'. Mặc định cho một chuỗi trống, vì hầu hết các máy chủ web hiện đại sẽ tự động tìm thấy 'index.php'. Nếu các URL sạch bị vô hiệu hóa, giá trị của đường dẫn $ sẽ được thêm vào dưới dạng tham số truy vấn 'q' thành $ tùy chọn ['script'] trong URL được trả về. Khi triển khai Drupal trên một máy chủ web không thể được cấu hình để tự động tìm index.php, thì hook_url thừng gửi_alter () có thể được triển khai để buộc giá trị này thành 'index.php'.
  • 'entity_type' : Loại thực thể của đối tượng được gọi là url (). Chỉ được đặt nếu url () được gọi bởi entity_uri ().
  • 'Thực thể' : Đối tượng thực thể (chẳng hạn như một nút) mà URL đang được tạo. Chỉ được đặt nếu url () được gọi bởi entity_uri ().

$ http_response_code: (tùy chọn) Mã trạng thái HTTP được sử dụng để chuyển hướng, mặc định là 302. Các giá trị hợp lệ cho mã trạng thái chuyển hướng 3xx được xác định trong RFC 2616 và dự thảo cho mã trạng thái HTTP mới:

301: Đã di chuyển vĩnh viễn (giá trị được đề xuất cho hầu hết các chuyển hướng).

302: Đã tìm thấy (mặc định trong Drupal và PHP, đôi khi được sử dụng để spam công cụ tìm kiếm).

303: Xem khác.

304: Không được sửa đổi.

305: Sử dụng Proxy.

307: Chuyển hướng tạm thời.

Drupal 8

Drupal 8 đã loại bỏ chức năng drupal_goto , để chuyển hướng đến URL bên ngoài, hãy xem câu trả lời này cho câu hỏi: Làm cách nào để tôi chuyển hướng đến một URL bên ngoài? .


1
Câu trả lời rất hay
OV

+1 tunic (và Nikhil M để chỉnh sửa đầu vào) Câu trả lời này tốt hơn các tài liệu API chính thức: api.drupal.org/api/drupal/includes%21common.inc/feft/ trộm (trong câu trả lời của bạn, mảng tùy chọn là toàn diện mô tả). +1 cũng Oleg để công nhận.
trị liệu
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.