75 lines
1.5 KiB
PHP
75 lines
1.5 KiB
PHP
|
<?php
|
||
|
namespace W3TC;
|
||
|
|
||
|
/**
|
||
|
* CDN rules generation for Nginx
|
||
|
*/
|
||
|
class Cdn_Environment_Nginx {
|
||
|
private $c;
|
||
|
|
||
|
|
||
|
|
||
|
public function __construct( $config ) {
|
||
|
$this->c = $config;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
public function generate( $cdnftp ) {
|
||
|
$rules = '';
|
||
|
$rule = $this->generate_canonical( $cdnftp );
|
||
|
if ( !empty( $rule ) ) {
|
||
|
$rules = $rule . "\n";
|
||
|
}
|
||
|
|
||
|
if ( $this->c->get_boolean( 'cdn.cors_header') ) {
|
||
|
$rules_a = Dispatcher::nginx_rules_for_browsercache_section(
|
||
|
$this->c, 'other', true );
|
||
|
$rules_a[] = 'add_header Access-Control-Allow-Origin "*";';
|
||
|
|
||
|
$rules .=
|
||
|
"location ~ \\.(ttf|ttc|otf|eot|woff|woff2|font.css)\$ {\n" .
|
||
|
' ' . implode( "\n ", $rules_a ) . "\n" .
|
||
|
"}\n";
|
||
|
}
|
||
|
|
||
|
if ( strlen( $rules ) > 0 ) {
|
||
|
$rules =
|
||
|
W3TC_MARKER_BEGIN_CDN . "\n" .
|
||
|
$rules .
|
||
|
W3TC_MARKER_END_CDN . "\n";
|
||
|
}
|
||
|
|
||
|
return $rules;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
public function generate_canonical( $cdnftp = false ) {
|
||
|
if ( !$this->c->get_boolean( 'cdn.canonical_header' ) ) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
$home = ( $cdnftp ? Util_Environment::home_url_host() : '$host' );
|
||
|
|
||
|
return 'add_header Link "<$scheme://' . $home .
|
||
|
'$request_uri>; rel=\"canonical\"";';
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
public function w3tc_browsercache_rules_section_extensions(
|
||
|
$extensions, $section ) {
|
||
|
// CDN adds own rules for those extensions
|
||
|
if ( $this->c->get_boolean( 'cdn.cors_header') ) {
|
||
|
unset( $extensions['ttf|ttc'] );
|
||
|
unset( $extensions['otf'] );
|
||
|
unset( $extensions['eot'] );
|
||
|
unset( $extensions['woff'] );
|
||
|
unset( $extensions['woff2'] );
|
||
|
}
|
||
|
|
||
|
return $extensions;
|
||
|
}
|
||
|
}
|