Domanda

Ho un sito ospitato e ho problemi a configurare Joomla (eseguendo Joomla + php + mySQL su IIS7 + win server 2008). Ho una configurazione simile in esecuzione su un computer locale (Joomla + php + mySQL su IIS7 + vista x64), quindi sono stato almeno in grado di seguire le istruzioni mostrate in vari tutorial su come configurarlo.

Questo sintomo con il sito ospitato è che non riesco ad attivare alcuna impostazione SEO in Joomla (nemmeno la prima impostazione, " URL compatibili con i motori di ricerca "). Ottengo 404 (file non trovato) o l'URL appare riscritto correttamente ma è sempre il contenuto della home page che viene visualizzato. Ho avuto un problema simile sul mio computer di casa e si è scoperto perché non stavo usando FastCGI per ospitare php, quindi ho deciso di investigarlo sul sito ospitato.

Comunque, ho notato nel file web.config della directory che ospita joomla sul sito ospitato la seguente riga:

<add name="Plesk_Handler_3522909676" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php5isapi.dll" resourceType="Either" />

Dall'esperienza passata, so che php ha dei problemi quando non funziona con fastCGI. Ho notato che web.config nella cartella principale utilizzava invece la seguente riga:

<add name="Plesk_Handler_0286090609" path="*.php" verb="*" modules="CgiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php-cgi.exe" resourceType="Either" /> 

L'ho copiato in web.config nella directory di joomla e ho avuto comportamenti diversi ... ma ancora non funzionanti. Se carico un file .php nella directory joomla che esegue phpInfo (), sotto l'API del server dice CGI / FastCGI. È conferma positiva che FastCGI è in uso? Perché il gestore nella configurazione web punta a modules = & Quot; CgiModule & Quot; invece di moduli = " FastCgiModule " (Non sono nemmeno sicuro che esista, ma trovo solo sospetto la menzione di CgiModule).

È un sito ospitato, quindi per quanto ne so non ho accesso al file ApplicationHost.config ...

È stato utile?

Soluzione

Ecco un semplice test:

  1. Crea un file phpinfo.php con

 <?php phpinfo(); ?> 

all'interno;

  1. Richiesta http://yoursite.com/phpinfo.php/foobar? foo = bar

  2. Controlla l'output di phpinfo e cerca _SERVER [" REQUEST_URI "].

Se questa variabile non è presente, viene utilizzato CGI. Se la variabile è presente e correttamente impostata su /phpinfo.php/foobar?foo=bar, viene utilizzato ISAPI o FastCGI. Cerca nella parte superiore dell'output l'API del server; dovrebbe essere impostato su ISAPI (che significa che ISAPI viene utilizzato) o CGI / FastCGI (che significa che FastCGI viene utilizzato, poiché abbiamo già escluso CGI).

Altri suggerimenti

Puoi usare (su centos) apachectl -M, mostrerai quali moduli sono abilitati:

apachectl -M:

file_cache_module (condiviso) mem_cache_module (condiviso) version_module (condiviso) fastcgi_module (condiviso)

Sfortunatamente, il controllo \_SERVER["REQUEST_URI"] non ha funzionato per me. Utilizzando CGI o FastCGI , veniva sempre visualizzato /phpinfo.php/foobar?foo=bar.

Né vedere se Server API = CGI/FastCGI è stato impostato - questo ti dice solo quali interfacce supporta la versione compilata di php, non ciò che viene utilizzato. Tuttavia, ho trovato un altro metodo che potrebbe funzionare in modo più affidabile.

Crea un file sul posto chiamato phpinfo.php contenente il testo: <? php phpinfo(); ?>

Controlla la variabile \_ENV["REDIRECT_HANDLER"]:
Se è impostato su php5-fastcgi (o qualcos'altro fastcgi-ish) la richiesta molto probabilmente è passata attraverso FastCGI . Se è impostato su application/x-httpd-php (o suppongo che sia diverso da quanto sopra), stai utilizzando CGI .

Tuttavia, un modo infallibile consiste nell'eseguire un piccolo test. A tale scopo è necessario lo strumento ab (Apache Bench).
Sia con che senza CGI, eseguilo da un'altra macchina:

ab -c 100 -n 1000 http://yourdomain.com/path/phpinfo.php

Controlla la riga Time taken for tests:. Almeno sulla mia scatola, accedendo al mio VPS tramite una connessione ADSL a 1,3 Mbps, FastCGI l'ha completamente massimizzato, mentre con CGI è stato in grado di riempire solo metà di esso.

Spero che questo aiuti.

php_sapi_name () o PHP_SAPI, funzionano entrambi.

http://php.net/manual/en/function .php-SAPI-name.php

<?php
    if (php_sapi_name() != 'cgi-fcgi'){
        echo 'I knew fastcgi wasn\'t working.';
    }else{
        echo 'Holy crap, something worked for once.';
    }

Joomla crea un file .htaccess con al suo interno regole di riscrittura per abilitare gli URL compatibili con i motori di ricerca. Se stai usando Apache dovrai impostare & Quot; AllowOverride FileInfo & Quot; per la directory che contiene l'installazione di joomla. Se stai usando IIS avrai bisogno di un modulo come IISModRewrite. Ecco le istruzioni per questo: [ http://www.micronovae.com/ModRewrite/ articoli / SEFJoomla.html]

Dovresti vedere un riferimento ad esso da

<?php
phpinfo();
?>

Server API = CGI / FastCGI

Assicurati che le cose siano inizialmente impostate su dove lo script fallisce completamente quando fastcgi non è in esecuzione. Quindi saprai, quando funziona, che il demone fastcgi è la ragione.

Questo ha funzionato per me.

/**
 * return phpinfo() results as an array
 *
 * @credit http://php.net/manual/en/function.phpinfo.php#106862
 * @param void
 * @return array
 */
function phpinfo_array(){
    ob_start();
    phpinfo();
    $info_arr = array();
    $info_lines = explode("\n", strip_tags(ob_get_clean(), '<tr><td><h2>'));
    $cat = 'general';
    foreach($info_lines as $line){
        preg_match('/<h2>(.*)<\/h2>/', $line, $title) ? $cat = preg_replace('/\s+/', '_', strtolower(trim($title[1]))) : null;
        if(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = $val[2];
        } elseif(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = array('local' => $val[2], 'master' => $val[3]);
        }
    }
    return $info_arr;
}


// output proper response code
$phpinfo = phpinfo_array();
$configure = (@isset($phpinfo['general']['configure_command'])) ?: null;

// properly account for FastCGI
if ($configure && preg_match('/--enable-fastcgi/', $configure)){
    // fastcgi response
    header('Status: 403 Access is forbidden');
} else {
    // http response
    header('HTTP/1.0 403 Access is forbidden');
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top