Có thể sửa URL quản trị đằng sau sự cố proxy mà không hack lõi?


7

Trong một câu hỏi trước đây, tôi đã cố gắng giải quyết vấn đề trong đó WordPress đã sử dụng sai url trong tiêu đề & phân trang cột có thể sắp xếp trong quản trị viên khi đứng sau proxy, giải pháp duy nhất có liên quan đến sửa đổi các tệp lõi, cụ thể là

Trên các dòng 491 và 658 trong wp-admin / gồm / class-wp-list-table.php, thay thế dòng này

$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

với

if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $hostname = $_SERVER['HTTP_X_FORWARDED_HOST'];
} else {
    $hostname = $_SERVER['HTTP_HOST'];
}
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $hostname . $_SERVER['REQUEST_URI'];

Bất cứ ai cũng biết làm thế nào để làm điều này mà không sửa đổi cốt lõi?

Câu trả lời:


14

Tôi đã đặt câu hỏi này trên Twitter và yêu cầu phản hồi từ một số nhà phát triển cốt lõi khác. Bản năng ruột của tôi là làm cho $current_urlcó thể lọc hoặc được tạo bởi một chức năng có thể bị ghi đè. Đây rõ ràng là cách sai về nó.

@markoheijnen :
@EricMann Đặt lại$_SERVER['HTTP_HOST']âm thanh như một giải pháp hackish. Cùng một mã sau đó có thể có trong wp-config.php

@Nacin :
@EricMann @markoheijnen Đưa nó vào wp-config là đúng. Đây không phải là công việc của WP để xử lý các tình huống proxy ngược.

@EricMann @markoheijnen Tốt nhất, chúng nên được đặt đúng trước khi WP (hoặc thậm chí PHP) được tải. wp-config là lựa chọn thay thế.

@markoheijnen :
@nacin @ericmann Trong trường hợp này, máy chủ / proxy bị cấu hình sai. Vì vậy, tôi có thể thấy lý do tại sao nó nên được sửa trong wp-config

Từ những âm thanh của sự hội tụ này, bạn có hai lựa chọn:

  1. Định cấu hình lại proxy của bạn để đặt các giá trị máy chủ chính xác trước khi mọi thứ đến với PHP / WP.
  2. Làm sạch thủ công và thiết lập $_SERVER['HTTP_HOST']trong wp-config.phptập tin của bạn .

Tôi đã suy nghĩ thêm một chút và đây là một số mã thực tế bạn có thể thêm vào wp-config.phpđể thiết lập mọi thứ (dựa trên bản vá lỗi thay đổi các tệp cốt lõi):

if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

Điều này sẽ thiết lập mọi thứ sao cho các tệp lõi mặc định không cần bất kỳ sửa đổi nào để hoạt động chính xác. Nhưng xin lưu ý rằng tôi không thể kiểm tra điều này vì tôi không có bất kỳ loại thiết lập proxy nào để xác minh nó ... vì vậy nếu mã này không giúp khắc phục tình trạng của bạn, vui lòng báo cáo lại và chúng tôi có thể thử cách khác.


1
Cũng thấy điều này, có thể giúp: wolfgang.reutz.at/2009/06/12/ Khăn
Otto

1
@EAMann Đề xuất mã của bạn ở trên dường như đang hoạt động, tôi sẽ sử dụng nó ngay bây giờ, may mắn thay, Phòng CNTT của chúng tôi đang xem xét sửa nó trên máy chủ để tôi sẽ không phải làm gì để khắc phục nó. Cảm ơn
Chuck

1

Tôi đã có vấn đề tương tự. Chúng tôi đã sử dụng Apache làm proxy (ProxyPass & ProxyPassReverse được xác định) và việc bổ sung đơn giản sau đây vào máy chủ ảo đã giải quyết nó:

Thêm vào máy chủ ảo:

ProxyPreservehost trên


0

Sử dụng Apache httpd v2.4 Tôi sử dụng cách sau để vận hành / wp-admin theo một cá thể apache riêng mà không sửa đổi bất kỳ mã hoặc bổ sung nào vào wp-config.php.

Lưu ý: Tôi đã làm xáo trộn ví dụ quá nhiều để vượt qua bộ lọc. Hy vọng rằng các từ khóa là đủ để bạn bắt đầu.

RequestHhead set Lưu trữ chỉnh sửa tiêu đề tên miền của bạn * Vị trí ^ tên miền của bạn

SetOutputFilter Sed OutputSed "s # yourdomain / # / # g"

Ví dụ apache công khai của tôi từ chối quyền truy cập vào / wp-admin.


Xin vui lòng, hỏi một câu hỏi mới . Chúng tôi không làm việc như một diễn đàn, kiểm tra hướng dẫn nhỏ này: Giới thiệu .
brasofilo
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.