Skip to content

Instantly share code, notes, and snippets.

@mattfarina
Created December 27, 2011 16:05
Show Gist options
  • Save mattfarina/1524135 to your computer and use it in GitHub Desktop.
Save mattfarina/1524135 to your computer and use it in GitHub Desktop.
Protocol Relative URLs in Drupal 7
<?php
/**
* Implements hook_file_url_alter().
*
* Make all URLs be protocol relative.
* Note: protocol relatice URLs will cause IE7/8 to download stylesheets twice.
* @see http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/
*/
function custom_file_url_alter(&$url) {
global $base_url;
static $relative_base_url = NULL, $relative_base_length = NULL;
$scheme = file_uri_scheme($url);
// For some things (e.g., images) hook_file_url_alter can be called multiple
// times. So, we have to be sure not to alter it multiple times. If we already
// are relative protocol we can just return.
// Only setup the and parse this stuff once.
if (!$relative_base_url || !$relative_base_length) {
$relative_base_url = '//' . file_uri_target($base_url);
$relative_base_length = strlen($relative_base_url);
}
if (!$scheme && substr($url, 0, $relative_base_length) == $relative_base_url) {
return;
}
// Handle the case where we have public files with the scheme public:// or
// the case the relative path doesn't start with a /. Internal relative urls
// have the base url prepended to them.
if (!$scheme || $scheme == 'public') {
// Internal Drupal paths.
if (!$scheme) {
$path = $url;
}
else {
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
$path = $wrapper->getDirectoryPath() . '/' . file_uri_target($url);
}
// Clean up Windows paths.
$path = str_replace('\\', '/', $path);
$url = $base_url . '/' . $path;
}
// Convert full URLs to relative protocol.
$protocols = array('http', 'https');
$scheme = file_uri_scheme($url);
if ($scheme && in_array($scheme, $protocols)) {
$url = '//' . file_uri_target($url);
}
}
@yonas
Copy link

yonas commented Apr 4, 2015

Thanks for the code! I've created a project for it here: https://www.drupal.org/project/protocol_relative_urls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment