Frage

Ich habe eine gehostete Website und ich habe Probleme bei der Konfiguration Joomla (läuft Joomla + PHP + MySQL auf IIS7 + gewinnen Server 2008). Ich habe eine ähnliche Konfiguration auf einem lokalen Rechner ausgeführt wird (Joomla + PHP + MySQL auf IIS7 + vista x64), so war ich wenigstens in der Lage Anleitung in verschiedenen Tutorials zeigte zu verfolgen, wie dies einzurichten.

Dieses Symptom mit der gehosteten Website ist, dass ich nicht auf irgendwelchen SEO Einstellungen in Joomla (nicht einmal die erste Einstellung, „Search Engine Friendly URLs“) drehen kann. Ich erhalte entweder 404 (Datei nicht gefunden) oder die URL richtig angezeigt wird neu geschrieben, aber es ist immer der Inhalt der Homepage, die angezeigt wird. Ich hatte ein ähnliches Problem auf meinem Rechner zu Hause und es stellt sich heraus gewesen zu sein, weil ich nicht FastCGI wurde mit PHP zu hosten, so habe ich beschlossen, dass auf der gehosteten Seite zu untersuchen.

Wie dem auch sei, bemerkte ich in der Datei web.config des Verzeichnisses joomla auf dem gehosteten Seite die folgende Zeile Hosting:

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

Aus den Erfahrungen der Vergangenheit, ich weiß, dass PHP einige Probleme hat, wenn sie nicht unter FastCGI läuft. Ich bemerkte die web.config im Stammordner die folgende Zeile verwendet statt:

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

Ich kopierte, dass in der web.config im joomla-Verzeichnis und ein anderes Verhalten bekam ... aber immer noch nicht funktioniert. Wenn ich eine Php-Datei im joomla Verzeichnis laden, die phpinfo läuft () unter Server-API sagt es CGI / FastCGI. Ist die positive Bestätigung , dass FastCGI verwendet wird? Warum funktioniert der Handler in dem Web-Konfigurationspunkt Module = „CgiModule“ statt Module = „FastCgiModule“ (Ich bin nicht einmal sicher, dass existiert, aber ich finde nur die Erwähnung von CgiModule verdächtig).

Es ist eine gehostete Website, so weit ich weiß, ich habe keinen Zugriff auf Datei ApplicationHost.config ...

War es hilfreich?

Lösung

Hier ist ein einfacher Test:

  1. Erstellen Sie eine phpinfo.php Datei mit

 <?php phpinfo(); ?> 

innen;

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

  2. die Ausgabe von phpinfo prüfen und sucht nach _SERVER [ "REQUEST_URI"].

Wenn diese Variable fehlt, dann wird CGI verwendet. Wenn die Variable vorhanden und richtig eingestellt ist, um /phpinfo.php/foobar?foo=bar, dann entweder ISAPI oder FastCGI verwendet wird. Schauen Sie in der Nähe der Spitze des Ausgangs für Server-API; es sollte entweder ISAPI eingestellt werden (was bedeutet, ISAPI verwendet wird) oder CGI / FastCGI (die FastCGI Mittel verwendet wird, da wir bereits CGI ausgeschlossen).

Andere Tipps

Sie (auf CentOS) apachectl -M verwenden können, werden Sie zeigen, welche Module aktiviert sind:

apachectl -M:

file_cache_module (gemeinsam) mem_cache_module (gemeinsam) version_module (gemeinsam) fastcgi_module (gemeinsam)

Leider hat die Überprüfung \_SERVER["REQUEST_URI"] nicht für mich arbeiten. Mit CGI oder FastCGI , es wird immer angezeigt /phpinfo.php/foobar?foo=bar.

Weder hat zu sehen, ob Server API = CGI/FastCGI gesetzt wurde - das sagt Ihnen, nur das, was Schnittstellen die kompilierte Version von PHP unterstützt, nicht das, was verwendet wird. Allerdings fand ich eine andere Methode, die zuverlässiger arbeiten können.

Plonk eine Datei im Ort namens phpinfo.php mit dem Text: <? php phpinfo(); ?>

Überprüfen Sie für die Variable \_ENV["REDIRECT_HANDLER"]:
Ist es gesetzt php5-fastcgi (oder etwas anderes fastcgi-ish) der Antrag wahrscheinlich ging durch FastCGI . Ist es gesetzt application/x-httpd-php (oder ich nehme an etwas anderes als das oben), verwenden Sie CGI .

Allerdings ist eine todsichere Methode, um durch einen kleinen Test läuft. Sie müssen die ab (Apache Bench) Werkzeug.
Sowohl mit als auch ohne CGI, laufen diese von einer anderen Maschine:

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

Überprüfen Sie die Zeile Time taken for tests:. Auf meiner Box zumindest meine VPS über eine 1.3Mbps ADSL-Verbindung Zugriff auf FastCGI es vollständig ausgereizt, während mit CGI nur in der Lage war, die Hälfte davon zu füllen.

Hope, das hilft.

php_sapi_name () oder PHP_SAPI, beide arbeiten.

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 erstellt eine .htaccess-Datei mit Rewrite-Regeln in der Suchmaschinen-freundliche URLs zu ermöglichen. Wenn Sie Apache verwenden, müssen Sie haben „AllowOverride Fileinfo“ für das Verzeichnis setzen Ihre Joomla-Installation enthält. Wenn Sie IIS verwenden, müssen Sie ein Modul wie IISModRewrite. Hier sind Anweisungen hierzu: [ http://www.micronovae.com/ModRewrite/ Artikel / SEFJoomla.html]

Sie sollten eine darauf verwiesen sehen von

<?php
phpinfo();
?>

Server API = CGI / FastCGI

Stellen Sie sicher, Dinge eingerichtet sind zunächst auf dem das Skript nicht vollständig, wenn fastcgi nicht läuft. Dann werden Sie wissen, wenn es funktioniert, dass fastcgi Daemon ist der Grund.

Das funktioniert für mich.

/**
 * 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');
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top