111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace W3TC;
 | |
| 
 | |
| /**
 | |
|  * CDN rules generation for LiteSpeed
 | |
|  */
 | |
| class Cdn_Environment_LiteSpeed {
 | |
| 	private $c;
 | |
| 
 | |
| 
 | |
| 
 | |
| 	public function __construct( $config ) {
 | |
| 		$this->c = $config;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	public function generate( $cdnftp ) {
 | |
| 		$section_rules = [
 | |
| 			'other' => [],
 | |
| 			'add_header' => []
 | |
| 		];
 | |
| 
 | |
| 		if ( $this->c->get_boolean( 'cdn.cors_header') ) {
 | |
| 			$section_rules['add_header'][] = 'set Access-Control-Allow-Origin "*"';
 | |
| 		}
 | |
| 
 | |
| 		$canonical_header = $this->generate_canonical( $cdnftp );
 | |
| 		if ( !empty( $canonical_header ) ) {
 | |
| 			$section_rules['add_header'][] = $canonical_header;
 | |
| 		}
 | |
| 
 | |
| 		if ( empty( $section_rules['add_header'] ) ) {
 | |
| 			return '';
 | |
| 		}
 | |
| 
 | |
| 		$section_rules = apply_filters( 'w3tc_cdn_rules_section', $section_rules, $this->c );
 | |
| 
 | |
| 		$context_rules[] = "    extraHeaders <<<END_extraHeaders";
 | |
| 		foreach ( $section_rules['add_header'] as $line ) {
 | |
| 			$context_rules[] = '        ' . $line;
 | |
| 		}
 | |
| 		$context_rules[] = "    END_extraHeaders";
 | |
| 
 | |
| 		$rules = [];
 | |
| 		$rules[] = 'context exp:^.*(ttf|ttc|otf|eot|woff|woff2|font.css)$ {';
 | |
| 		$rules[] = '    location $DOC_ROOT/$0';
 | |
| 		$rules[] = '    allowBrowse 1';
 | |
| 		$rules[] = implode( "\n", $context_rules );
 | |
| 		$rules[] = '}';
 | |
| 
 | |
| 		return
 | |
| 			W3TC_MARKER_BEGIN_CDN . "\n" .
 | |
| 			implode( "\n", $rules ) . "\n" .
 | |
| 			W3TC_MARKER_END_CDN . "\n";
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	public function generate_canonical( $cdnftp = false ) {
 | |
| 		if ( !$this->c->get_boolean( 'cdn.canonical_header' ) ) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		$home_url  = get_home_url();
 | |
| 		$parse_url = @parse_url( $home_url ); // phpcs:ignore
 | |
| 		if ( !isset( $parse_url['host'] ) ) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return "set Link '<" . $parse_url['scheme'] . '://' .	$parse_url['host'] .
 | |
| 			'%{REQUEST_URI}e>; rel="canonical"' . "'";
 | |
| /*
 | |
| 			$rules .= "      RewriteRule .* - [E=CANONICAL:https://$host%{REQUEST_URI},NE]\n";
 | |
| 			$rules .= "   </IfModule>\n";
 | |
| 			$rules .= "   <IfModule mod_headers.c>\n";
 | |
| 			$rules .= '      Header set Link "<%{CANONICAL}e>; rel=\"canonical\""' . "\n";
 | |
| 
 | |
| 			return 'set Link "<%{CANONICAL}e>; rel=\"canonical\""' . "\n";*/
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	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;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	// add canonical header to all browsercache sections, since its needed for
 | |
| 	// assets
 | |
| 	public function w3tc_browsercache_rules_section( $section_rules, $section ) {
 | |
| 		$canonical_header = $this->generate_canonical();
 | |
| 		if ( !empty( $canonical_header ) ) {
 | |
| 			$section_rules['add_header'][] = $canonical_header;
 | |
| 		}
 | |
| 
 | |
| 		return $section_rules;
 | |
| 	}
 | |
| }
 |