I have recently had some problems with a wordpress website on which i'm working ,
i have installed wp-rocket and recently found my site "dead" with loop issue ,
i was like "what the hell happent" ?
Enabled debug from config no error .. hmm thinking , must be server side , lets check .htaccess , well yeah .. that was the issue , messed up rewrite lines , incomplete lines and so on , that's because the "dumb" developers of the plugin chosed to write their own "write to htaccess rulles" function ,
wordpress already has that function built in so you can add rulles with markers .
Here are the modified functions from wp-rocket htaccess.php file that writes rulles on htaccess , you can find it in :
/wp-content/plugins/wp-rocket/inc/front/htaccess.php
	
enjoy and have a nice day , i'm out !
It seems that they need to add their htaccess lines before others so the compression could work as it should, here are the modified functions :
	
							
						
					i have installed wp-rocket and recently found my site "dead" with loop issue ,
i was like "what the hell happent" ?
Enabled debug from config no error .. hmm thinking , must be server side , lets check .htaccess , well yeah .. that was the issue , messed up rewrite lines , incomplete lines and so on , that's because the "dumb" developers of the plugin chosed to write their own "write to htaccess rulles" function ,
wordpress already has that function built in so you can add rulles with markers .
Here are the modified functions from wp-rocket htaccess.php file that writes rulles on htaccess , you can find it in :
/wp-content/plugins/wp-rocket/inc/front/htaccess.php
PHP Code:
	
	
function flush_rocket_htaccess( $force = false )
{
    if ( ! $GLOBALS['is_apache'] ) {
        return;
    }
    
    global $wp_rewrite;
    $rules = '';
    $home_path = get_home_path();
    
    $htaccess_file = $home_path.'.htaccess';
 
    /*
     * If the file doesn't already exist check for write access to the directory
     * and whether we have some rules. Else check for write access to the file.
     */
    if ((!file_exists($htaccess_file) && is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || is_writable($htaccess_file)) {
    
        if ( got_mod_rewrite() ) {
        
        if ( $force === false ) {
            $rules = get_rocket_htaccess_marker();
        }
        
        return insert_with_markers( $htaccess_file, 'WP Rocket', $rules );
        }
    }
    
        // Update the .htacces file
        //rocket_put_content( $htaccess_file, $rules . $ftmp );
}
/**
 * Return the markers for htacces rules
 *
 * @since 1.0
 *
 * @return string $marker Rules that will be printed
 */
function get_rocket_htaccess_marker()
{
        $marker  = get_rocket_htaccess_charset();
        $marker .= get_rocket_htaccess_etag();
        $marker .= get_rocket_htaccess_web_fonts_access();
        $marker .= get_rocket_htaccess_files_match();
        $marker .= get_rocket_htaccess_mod_expires();
        $marker .= get_rocket_htaccess_mod_deflate();
        
        /** This filter is documented in inc/front/process.php */
        
        if ( apply_filters( 'do_rocket_generate_caching_files', true ) ) {
        $marker .= get_rocket_htaccess_mod_rewrite();    
        }
    
        
        $rules = explode( "\n", $marker );
            
    /**
     * Filter rules added by WP Rocket in .htaccess
     *
     * @since 2.1
     *
     * [USER="20491"]param[/USER] string $marker The content of all rules
    */
    
    $rules = apply_filters('rocket_htaccess_marker' , $rules );
    return $rules;
} 
It seems that they need to add their htaccess lines before others so the compression could work as it should, here are the modified functions :
PHP Code:
	
	
/* for testing purposes , create a htaccess file with the following 
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# BEGIN otherewritedemo
# END otherewritedemo
*/
    
    
    
  /* bellow you have the modified + added functions */
 
  /*added modified native worpdress insert htaccess function */
  
 function wprocket_insert_with_markers( $filename, $marker, $insertion ) {
    if (!file_exists( $filename ) || is_writeable( $filename ) ) {
        if (!file_exists( $filename ) ) {
            $markerdata = '';
        } else {
            $markerdata = explode( "\n", implode( '', file( $filename ) ) );
        }
        if ( !$f = @fopen( $filename, 'w' ) )
            return false;
        $foundit = false;
        if ( $markerdata ) {
            $state = true;
            $add_at_bottom="";
            
            foreach ( $markerdata as $n => $markerline ) {
                if (strpos($markerline, '# BEGIN ' . $marker) !== false)
                    $state = false;
                if ( $state ) {
                    /* build already existing lines list */
                    if ( $n + 1 < count( $markerdata ) )
                        $add_at_bottom .="{$markerline}\n";
                        
                    else
                        $add_at_bottom .="{$markerline}";
                }
                if (strpos($markerline, '# END ' . $marker) !== false) {
                    fwrite( $f, "# BEGIN {$marker}\n" );
                    if ( is_array( $insertion ))
                        foreach ( $insertion as $insertline )
                            fwrite( $f, "{$insertline}\n" );
                    fwrite( $f, "# END {$marker}\n" );
                    $state = true;
                    $foundit = true;
                }
            }
            
        }
        if (!$foundit) {
            fwrite( $f, "\n# BEGIN {$marker}\n" );
            foreach ( $insertion as $insertline )
                fwrite( $f, "{$insertline}\n" );
            fwrite( $f, "# END {$marker}\n" );
        }
        
        /* add them at the bottom */
        @fwrite( $f, $add_at_bottom );
            
        fclose( $f );
        return true;
    } else {
        return false;
    }
}
 
 
function flush_rocket_htaccess( $force = false )
{
    if ( ! $GLOBALS['is_apache'] ) {
        return;
    }
    
    global $wp_rewrite;
    
    $rules = '';
    $home_path = get_home_path();
    
    $htaccess_file = $home_path.'.htaccess';
 
    /*
     * If the file doesn't already exist check for write access to the directory
     * and whether we have some rules. Else check for write access to the file.
     */
    if ((!file_exists($htaccess_file) && is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || is_writable($htaccess_file)) {
    
        if ( got_mod_rewrite() ) {
        
        if ( $force === false ) {
            $rules = get_rocket_htaccess_marker();
        }
        
        $return = wprocket_insert_with_markers( $htaccess_file, 'WP Rocket', $rules );
        
        
        return $return;
        }
    }
    
}
/**
 * Return the markers for htacces rules
 *
 * @since 1.0
 *
 * @return string $marker Rules that will be printed
 */
 
function get_rocket_htaccess_marker()
{
        $marker  = get_rocket_htaccess_charset();
        $marker .= get_rocket_htaccess_etag();
        $marker .= get_rocket_htaccess_web_fonts_access();
        $marker .= get_rocket_htaccess_files_match();
        $marker .= get_rocket_htaccess_mod_expires();
        $marker .= get_rocket_htaccess_mod_deflate();
        
        /** This filter is documented in inc/front/process.php */
        
        if ( apply_filters( 'do_rocket_generate_caching_files', true ) ) {
        $marker .= get_rocket_htaccess_mod_rewrite();    
        }
        
        $rules = explode( "\n", $marker );
            
    /**
     * Filter rules added by WP Rocket in .htaccess
     * 
     * @since 2.1
     *
     * [USER="20491"]param[/USER] string $marker The content of all rules
    */
    
    $rules = apply_filters('rocket_htaccess_marker' , $rules );
    return $rules;
} 

Comment