<?php /* Plugin Name: Noblogs Wp SSL Plugin URI: https://git.autistici.org/ai/noblogs-wp-ssl Description: Rewrite internal URLS to use HTTPS. Version: 0.1 Author: Cloudflare, sand License: GPLv2 */ /* Heavily copied from: https://wordpress.org/plugins/cloudflare/ */ if ( !function_exists('add_action') ) { echo "This is a Wordpress plugin and should not be called directly"; exit; } function rewrite_links($buffer) { // replace href or src attributes within script, link, base, and img tags with just "//" for protocol $re = "#(<(?:script|link|base|img|form|a)(?:[^>]*)(?:href|src|action)=[\"'])http://([^.]+\.noblogs\.org)#i"; $subst = "$1https://$2"; return preg_replace($re, $subst, $buffer); } // This is a filter function that act on the whole output buffer function noblogs_wp_ssl_buffer_wrapup($buffer) { // skip rewrite if not on HTTPS if (empty($_SERVER['HTTPS'])) { return $buffer; } // Check for a Content-Type header. Currently only apply rewriting to "text/html" or undefined $headers = headers_list(); $content_type = null; foreach ($headers as $header) { if (strpos(strtolower($header), 'content-type:') === 0) { $pieces = explode(':', strtolower($header)); $content_type = trim($pieces[1]); break; } } if (is_null($content_type) || substr($content_type, 0, 9) === 'text/html') { $return = rewrite_links($buffer); // on regex error, skip overwriting buffer if ($return) { $buffer = $return; } } return $buffer; } // This is a filter function that act on the post $content function noblogs_wp_ssl_content_filter($content) { // skip rewrite if not on HTTPS if (empty($_SERVER['HTTPS'])) { return $content; } $return = rewrite_links($content); if ($return) { $content = $return; } return $content; } // ob_start('wp_ssl_buffer_wrapup'); add_filter('the_content', 'noblogs_wp_ssl_content_filter');