-
-
Save JamesPaden/4cf0670f7b79373b1ded to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* @package Reverse Proxy | |
*/ | |
/* | |
Plugin Name: Reverse Proxy | |
Plugin URI: https://instrumentalapp.com/ | |
Description: Reverse proxy setup for Instrumental blog | |
Version: 1.0 | |
Author: James Paden | |
Author URI: https://instrumentalapp.com | |
*/ | |
// Change to match the desired subfolder, no leading or tralling slash | |
define("RP_SUBFOLDER", "blog"); | |
function rp_is_login_page() { | |
return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); | |
} | |
if ( $_SERVER["REMOTE_ADDR"] != "127.0.0.1" && !is_admin() && !rp_is_login_page() && $_GET["preview"] != "true" ) { | |
add_action( 'init', function () { | |
if (!$_SERVER["HTTP_X_IS_REVERSE_PROXY"]) { | |
//not coming from us, 404 it. | |
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); | |
exit; | |
} | |
}); | |
//From http://stackoverflow.com/questions/772510/wordpress-filter-to-modify-final-html-output | |
ob_start(); | |
add_action('shutdown', function() { | |
$final = ''; | |
$levels = count(ob_get_level()); | |
for ( $i = 0; $i < $levels; $i++ ) { | |
$final .= ob_get_clean(); | |
} | |
// Apply any filters to the final output | |
$final = str_replace("http://" . $_SERVER["HTTP_HOST"], "https://" . $_SERVER["HTTP_X_ORIGINAL_HOST"] . "/" . RP_SUBFOLDER, $final); | |
echo $final; | |
}, 0); | |
} |
# Example code for Apache config | |
# Put this inside the <VirtualHost> directive | |
<Location /blog> | |
RequestHeader set X-Is-Reverse=Proxy true | |
RequestHeader set X-Original-Host yourwebsite.com | |
ProxyPass http://yourpressableblog.com | |
ProxyPassReverse http://yourpressableblog.com | |
</Location> |
# Example code for Nginx config | |
# Put this inside the "server {" section | |
location /blog/ { | |
proxy_set_header X-Original-Host $host; | |
proxy_set_header X-Is-Reverse-Proxy "true"; | |
proxy_pass_header Set-Cookie; | |
proxy_cookie_path / /blog/; | |
proxy_pass http://yourpressableblog.com/; | |
} |
Hi , This is good and exactly what I need . Can you please let me know how to add reverproxy.php in the code or include . I am new to wordpress . Thanks a lot for the response.
HI, I cannot recommend the usage of this if you aren't not an expert Wordpress user. It's an advanced technique and will likely require ongoing maintenance and changes.
Thanks for quick reply . Please let me know upgrade challenges . If you have any document please share . Also I tried the solution with minimal change it worked . I also like to understand better about this code before taking decision. Thanks again helping on this issue
Hi James, I just stumbled upon your code which seems to align with what I'm trying to achieve.
I have 2 questions if you don't mind:
1- do you change the site_url and home_url on the origin site to be "finalsite.com/blog" or do you leave those as originsite.com ?
2- how do you get assets from wp-content to not throw 404 errors when accessed via the RP URL (finalsite.com/blog/wp-content/...) since they physically live on originsite.com/wp-content/...
Thank you,
Hi James,
Awesome work that you shared.
--- EDIT ----
In fact if your site is not in HTTPS remove the
s
line 41 of the plugin and keep theblog.example.com
as theWP_HOME
&WP_SITEURL
. That should solve the problem.Which means all your admin panels keeps the default url
blog.example.com
when showing links. Make sure you watch out for this.The previous blog posts links
blog.example.com/123
won't get redirected. Also if you have your site inhttps
and your media are hosted with your wp blog which is not https it won't load the resources.@james correct me if I'm wrong thanks.