Make WordPress Core

Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#47033 closed defect (bug) (duplicate)

Admin Paging broken when using a Proxy or Alternate Site URL

Reported by: ooglek's profile ooglek Owned by:
Milestone: Priority: normal
Severity: normal Version:
Component: Administration Keywords:
Focuses: Cc:

Description

I'm running WP as a separate subdomain website and using nginx to proxy requests to that site to it is presented as part of our main site.

The WordPress Address (URL) and Site Address (URL) are both set to "https://www.domain.com/blog" and for the core of the site and most of the admin functionality, this works. WordPress is running directly at "http://wp.domain.com/blog" and nginx proxies requests to that host, as it lives on a separate non-load-balanced host than the main www site.

However, when viewing Posts, if you click to Page 2, you are logged out. This occurred in both 5.0.4 and 5.1.1.

I've solved this issue by fixing the $current_url value in two files and three places.

  1. wp-admin/includes/class-wp-list-table.php
  2. wp-admin/includes/misc.php

My solution was to use get_site_url() and then set_url_scheme to that value plus the REQUEST_URI.

However, since all three places run the same three calls -- get_site_url, set_url_scheme, then remove_query_arg, it may make sense to throw that in a helper class to simplify and unify.

I'll submit a patch shortly.

Here's the diff, but not my final patch, against 5.1.1:

--- /tmp/class-wp-list-table.php        2019-04-25 02:28:04.760014000 +0000
+++ ./blog/wp-admin/includes/class-wp-list-table.php    2019-04-25 02:31:36.522866000 +0000
@@ -795,7 +795,8 @@
                $current              = $this->get_pagenum();
                $removable_query_args = wp_removable_query_args();

-               $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+               $site_url = get_site_url(null, '', 'admin');
+               $current_url = set_url_scheme(substr($site_url, 0, strpos($site_url, '/', 8)) . $_SERVER['REQUEST_URI'] );

                $current_url = remove_query_arg( $removable_query_args, $current_url );

@@ -1079,7 +1080,8 @@
        public function print_column_headers( $with_id = true ) {
                list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();

-               $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+               $site_url = get_site_url(null, '', 'admin');
+               $current_url = set_url_scheme(substr($site_url, 0, strpos($site_url, '/', 8)) . $_SERVER['REQUEST_URI'] );
                $current_url = remove_query_arg( 'paged', $current_url );

                if ( isset( $_GET['orderby'] ) ) {

--- /tmp/misc.php       2019-04-25 02:32:56.006536000 +0000
+++ /usr/local/www/vhosts/wp.tossabledigits.com/blog/wp-admin/includes/misc.php 2019-04-25 02:33:44.931033000 +0000
@@ -1163,7 +1163,8 @@
        }

        // Ensure we're using an absolute URL.
-       $current_url  = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
+       $site_url = get_site_url(null, '', 'admin');
+       $current_url  = set_url_scheme(substr($site_url, 0, strpos($site_url, '/', 8)) . $_SERVER['REQUEST_URI'] );
        $filtered_url = remove_query_arg( $removable_query_args, $current_url );
        ?>
        <link id="wp-admin-canonical" rel="canonical" href="<?php echo esc_url( $filtered_url ); ?>" />

Change History (2)

#1 @ocean90
5 years ago

  • Milestone Awaiting Review deleted
  • Resolution set to duplicate
  • Status changed from new to closed
  • Version 5.1.1 deleted

Hello @ooglek, welcome to WordPress Trac!

Thanks for the report, we're already tracking this issue in #36201.

This ticket was mentioned in Slack in #slackhelp by ooglek. View the logs.


5 years ago

Note: See TracTickets for help on using tickets.