' . EOL; $htaccess .= HT.'mod_gzip_on Yes' . EOL; $htaccess .= HT.'mod_gzip_dechunk Yes' . EOL; $htaccess .= HT.'mod_gzip_item_include file .('.$modGzip['includedFileExtension'].')$' . EOL; $htaccess .= HT.'mod_gzip_item_include handler ^cgi-script$' . EOL; $htaccess .= HT.'mod_gzip_item_include mime ^text/.*' . EOL; $htaccess .= HT.'mod_gzip_item_include mime ^application/x-javascript.*' . EOL; $htaccess .= HT.'mod_gzip_item_exclude mime ^image/.*' . EOL; $htaccess .= HT.'mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*' . EOL; $htaccess .= '' . EOL . EOL; } } /** * Expires status * * @param string &$htaccess * * @return void */ protected static function modExpires(&$htaccess) { $modExpires = HTACCESS_CONFIG['cache']['modExpires']; if( $modExpires['status'] === true ) { $exp = ''; $settings = $modExpires['fileTypeTime']; foreach( $settings as $type => $value ) { $exp .= HT.'ExpiresByType '.$type.' "access plus '.$value.' seconds"'.EOL; } $htaccess .= '' . EOL; $htaccess .= HT.'ExpiresActive On' . EOL; $htaccess .= HT.'ExpiresDefault "access plus '.$modExpires['defaultTime'].' seconds"' . EOL; $htaccess .= rtrim($exp, EOL) . EOL; $htaccess .= '' . EOL . EOL; } } /** * Headers status * * @param string &$htaccess * * @return void */ protected static function modHeaders(&$htaccess) { $modHeaders = HTACCESS_CONFIG['cache']['modHeaders']; if( $modHeaders['status'] === true ) { $fmatch = ''; $fileExtensionTimeAccess = $modHeaders['fileExtensionTimeAccess']; foreach( $fileExtensionTimeAccess as $type => $value ) { $fmatch .= HT.'' . EOL; $fmatch .= HT.HT.'Header set Cache-Control "max-age='.$value['time'].', '.$value['access'].'"' . EOL; $fmatch .= HT.''.EOL; } $htaccess .= '' . EOL; $htaccess .= rtrim($fmatch, EOL) . EOL; $htaccess .= '' . EOL . EOL; } } /** * Initial Headers status * * @param string &$htaccess * * @return void */ protected static function headers(&$htaccess) { $settings = HTACCESS_CONFIG['headers']; $htaccess .= "".EOL; foreach( $settings as $val ) { if( ! empty($val) ) { $htaccess .= HT."$val".EOL; } } $htaccess .= "".EOL.EOL; } /** * Settings * * @param string &$htaccess * * @return void */ protected static function settings(&$htaccess) { $settings = HTACCESS_CONFIG['settings']; if( ! empty($settings) ) { foreach( $settings as $key => $val ) { if( ! is_numeric($key) ) { if( is_array($val) ) { $htaccess .= "<$key>".EOL; foreach( $val as $k => $v) { if( ! is_numeric($k) ) { $htaccess .= HT."$k $v".EOL; } else { $htaccess .= HT.$v.EOL; } } $keyex = explode(" ", $key); $htaccess .= "".EOL.EOL; } else { $htaccess .= "$key $val".EOL; } } else { $htaccess .= $val.EOL; } } } } /** * Get base content * * @param string &$htaccess * * @return void */ protected static function baseContent(&$htaccess) { if( empty($_SERVER['PATH_INFO']) ) { $indexSuffix = '?'; $flag = 'QSA'; } else { $indexSuffix = ''; $flag = 'L'; } $htaccess .= "" . EOL; $htaccess .= HT . "RewriteEngine On" . EOL; $htaccess .= HT . "RewriteBase /" . EOL; $htaccess .= HT . "RewriteCond %{REQUEST_FILENAME} !-f" . EOL; $htaccess .= HT . "RewriteCond %{REQUEST_FILENAME} !-d" . EOL; $htaccess .= HT . 'RewriteRule ^(.*)$ ' . ($_SERVER['SCRIPT_NAME'] ?? NULL) . $indexSuffix . '/$1 [' . $flag . ']' . EOL; $htaccess .= "" . EOL . EOL; $htaccess .= 'ErrorDocument 403 /' . BASE_DIR . DIRECTORY_INDEX . EOL . EOL; $htaccess .= 'DirectoryIndex ' . DIRECTORY_INDEX . EOL; } /** * Initial Settings * * @param string &$htaccess * * @return void */ protected static function ini(&$htaccess) { $status = HTACCESS_CONFIG['ini']['status']; if( $status === false ) { return false; } $settings = Config::ini(); if( ! empty($settings) ) { $sets = ''; foreach( $settings as $k => $v ) { if( $v !== '' && ! empty($k) ) { $sets .= HT . "php_value $k $v" . EOL; } } if( ! empty($sets) ) { $htaccess .= EOL . "" . EOL; $htaccess .= $sets; $htaccess .= "" . EOL; } } } /** * Creates htaccess file. * * @return void */ public static function create() { if( empty(HTACCESS_CONFIG['createFile']) ) { return false; } $htaccess = '#----------------------------------------------------------------------'.EOL; $htaccess .= '# This file automatically created and updated'.EOL; $htaccess .= '#----------------------------------------------------------------------'.EOL.EOL; # Initial Cache self::cache($htaccess); # Initial Headers self::headers($htaccess); # Settings self::settings($htaccess); # Base Content self::baseContent($htaccess); # Initial Settings self::ini($htaccess); $file = '.htaccess'; if( defined('ZN_SHARED_DIR') ) { $file = ZN_SHARED_DIR . $file; } $getContents = is_file($file) ? trim(file_get_contents($file)) : ''; $htaccess .= EOL . '#----------------------------------------------------------------------'; $htaccess = trim($htaccess); if( $htaccess === $getContents ) { return false; } return (bool) file_put_contents($file, trim($htaccess)); } }