• I cant really do a pull request with SVN but here is some modifications.

    Issue:
    I got a website at in /var/www/website that is executing when ever I access http://www.domain.com/. I got a wordpress blog in /var/www/wordpress. I’ve configured Apache with an alias like

    Alias /site "/var/www/wordpress"
    <Directory "/var/www/wordpress">
          AllowOverride All
          Allow from All
    </Directory>

    There are two problems with the plugin when running this setup.
    #1 w3_get_document_root() and w3_get_home_root() are returning blank strings
    #2 RewriteBase is misconfigured for the minify/.htaccess

    Solution:
    I made some changes to the functions named in #1.

    function w3_get_document_root() {
        static $document_root = null;
        $len = strlen($_SERVER['PHP_SELF']);
        $split = $len/2;
    
        if ($document_root === null) {
            if (!empty($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == $_SERVER['PHP_SELF']) {
                $document_root = w3_get_site_root();
            } elseif (!empty($_SERVER['DOCUMENT_ROOT'])) {
                //get the script path without the HOME
                $phpSelf=str_replace(w3_get_home_path(), '',w3_path($_SERVER['PHP_SELF']));
    
                $document_root = substr(w3_path($_SERVER['SCRIPT_FILENAME']), 0, -strlen($phpSelf));
            } elseif (!empty($_SERVER['PATH_TRANSLATED'])) {
                $document_root = substr(w3_path($_SERVER['PATH_TRANSLATED']), 0, -strlen(w3_path($_SERVER['PHP_SELF'])));
            } elseif (!empty($_SERVER['DOCUMENT_ROOT'])) {
                $document_root = w3_path($_SERVER['DOCUMENT_ROOT']);
            } else {
                $document_root = w3_get_site_root();
            }
    
            $document_root = realpath($document_root);
            $document_root = w3_path($document_root);
        }
    
        return $document_root;
    }
    
    function w3_get_home_root() {
        if (w3_is_network()) {
            $path = w3_get_base_path();
        } else {
            $path = w3_get_home_path();
        }
    
        $root = w3_get_document_root();
        $home_root = $root . $path;
        $home_root = realpath($home_root);
        if($home_root === false){
            $home_root=$root;
        }
        $home_root = w3_path($home_root);
    
        return $home_root;
    }

    To address the problem in #2 if rewrote the rules_core_generate_apache() function.

    function rules_core_generate_apache($config) {
            $is_network = w3_is_network();
    
            $base_path = w3_get_base_path();
            $home_path = w3_get_home_path();
            $rewrite_base = ($is_network ? $base_path : $home_path);
            $rewrite_base=rtrim($rewrite_base,'/');
    
            $cache_dir = w3_filename_to_uri(W3TC_CACHE_MINIFY_DIR);
            $minify_filename = w3_make_relative_path(W3TC_DIR . '/pub/minify.php',
                W3TC_CACHE_MINIFY_DIR);
    
            $engine = $config->get_string('minify.engine');
            $browsercache = $config->get_boolean('browsercache.enabled');
            $compression = ($browsercache && $config->get_boolean('browsercache.cssjs.compression'));
    
            $rules = '';
            $rules .= W3TC_MARKER_BEGIN_MINIFY_CORE . "\n";
            $rules .= "<IfModule mod_rewrite.c>\n";
            $rules .= "    RewriteEngine On\n";
            $rules .= "    RewriteBase " . $rewrite_base.$cache_dir . "/\n";
            $rules .= "    RewriteRule /w3tc_r
    /* some more code.. */

    Disclaimer:
    This pull request is not ready to merge (since public unittests do not exist). I have not tried this solution in any other server configuration.

    http://wordpress.org/plugins/w3-total-cache/

Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
  • The topic ‘[PULL REQUEST] Add support for Apache alias’ is closed to new replies.