Merge branch 'serve-static-files' into 'dev'
Serve static files directly if not caught by web server See merge request hubzilla/core!1691
This commit is contained in:
commit
a85f0a93c6
45
boot.php
45
boot.php
@ -896,6 +896,51 @@ class App {
|
||||
if(x($_GET,'q'))
|
||||
self::$cmd = escape_tags(trim($_GET['q'],'/\\'));
|
||||
|
||||
// Serve raw files from the file system in certain cases.
|
||||
$filext = pathinfo(self::$cmd, PATHINFO_EXTENSION);
|
||||
|
||||
$serve_rawfiles=[
|
||||
'jpg'=>'image/jpeg',
|
||||
'jpeg'=>'image/jpeg',
|
||||
'gif'=>'image/gif',
|
||||
'png'=>'image/png',
|
||||
'ico'=>'image/vnd.microsoft.icon',
|
||||
'css'=>'text/css',
|
||||
'js'=>'text/javascript',
|
||||
'htm'=>'text/html',
|
||||
'html'=>'text/html',
|
||||
'map'=>'application/octet-stream',
|
||||
'ttf'=>'font/ttf',
|
||||
'woff'=>'font/woff',
|
||||
'woff2'=>'font/woff2',
|
||||
'svg'=>'image/svg+xml'];
|
||||
|
||||
if (array_key_exists($filext, $serve_rawfiles) && file_exists(self::$cmd)) {
|
||||
$staticfilecwd = getcwd();
|
||||
$staticfilerealpath = realpath(self::$cmd);
|
||||
if(strpos($staticfilerealpath,$staticfilecwd) !== 0) {
|
||||
header("HTTP/1.1 404 Not Found", true, 404);
|
||||
killme();
|
||||
}
|
||||
|
||||
$staticfileetag = '"'.md5($staticfilerealpath.filemtime(self::$cmd)).'"';
|
||||
header("ETag: ".$staticfileetag);
|
||||
header("Cache-control: max-age=2592000");
|
||||
if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
|
||||
// If HTTP_IF_NONE_MATCH is same as the generated ETag => content is the same as browser cache
|
||||
// So send a 304 Not Modified response header and exit
|
||||
if($_SERVER['HTTP_IF_NONE_MATCH'] == $staticfileetag) {
|
||||
header('HTTP/1.1 304 Not Modified', true, 304);
|
||||
killme();
|
||||
}
|
||||
}
|
||||
header("Content-type: ".$serve_rawfiles[$filext]);
|
||||
$handle = fopen(self::$cmd, "rb");
|
||||
fpassthru($handle);
|
||||
fclose($handle);
|
||||
killme();
|
||||
}
|
||||
|
||||
// unix style "homedir"
|
||||
|
||||
if((substr(self::$cmd, 0, 1) === '~') || (substr(self::$cmd, 0, 1) === '@'))
|
||||
|
Reference in New Issue
Block a user