Pregunta

Tengo un sitio alojado y tengo problemas para configurar Joomla (ejecutar Joomla + php + mySQL en IIS7 + win server 2008). Tengo una configuración similar ejecutándose en una máquina local (Joomla + php + mySQL en IIS7 + vista x64), por lo que al menos pude seguir las instrucciones que se muestran en varios tutoriales sobre cómo configurar esto.

Este síntoma con el sitio alojado es que no puedo activar ninguna configuración de SEO en Joomla (ni siquiera la primera configuración, " URLs amigables para motores de búsqueda "). Obtengo 404 (archivo no encontrado) o la URL aparece correctamente reescrita pero siempre se muestra el contenido de la página de inicio. Tuve un problema similar en mi máquina doméstica y resultó que no estaba usando FastCGI para alojar php, así que decidí investigar eso en el sitio alojado.

De todos modos, noté en el archivo web.config del directorio que aloja joomla en el sitio alojado la siguiente línea:

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

Por experiencia pasada, sé que php tiene algunos problemas cuando no se ejecuta bajo fastCGI. Noté que web.config en la carpeta raíz usaba la siguiente línea en su lugar:

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

Copié eso en web.config en el directorio joomla, y obtuve un comportamiento diferente ... pero aún no funciona. Si cargo un archivo .php en el directorio de joomla que ejecuta phpInfo (), en API del servidor dice CGI / FastCGI. ¿Es esa confirmación positiva de que FastCGI se está utilizando? ¿Por qué el controlador en la configuración web apunta a modules = & Quot; CgiModule & Quot; en lugar de módulos = " FastCgiModule " (Ni siquiera estoy seguro de que exista, pero solo encuentro sospechosa la mención de CgiModule).

Es un sitio alojado, por lo que yo sé, no tengo acceso al archivo ApplicationHost.config ...

¿Fue útil?

Solución

Aquí hay una prueba simple:

  1. Cree un archivo phpinfo.php con

 <?php phpinfo(); ?> 

dentro;

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

  2. Verifique la salida de phpinfo y busque _SERVER [" REQUEST_URI "].

Si falta esta variable, se usa CGI. Si la variable está presente y configurada correctamente en /phpinfo.php/foobar?foo=bar, se utiliza ISAPI o FastCGI. Busque cerca de la parte superior de la salida para la API del servidor; debe establecerse en ISAPI (lo que significa que se está utilizando ISAPI) o CGI / FastCGI (lo que significa que se está utilizando FastCGI, ya que ya descartamos CGI).

Otros consejos

Puede usar (en centos) apachectl -M, le mostrará qué módulos están habilitados:

apachectl -M:

file_cache_module (compartido) mem_cache_module (compartido) version_module (compartido) fastcgi_module (compartido)

Desafortunadamente, la comprobación \_SERVER["REQUEST_URI"] no funcionó para mí. Usando CGI o FastCGI , siempre mostraba /phpinfo.php/foobar?foo=bar.

Tampoco ver si se configuró Server API = CGI/FastCGI, eso solo le dice qué interfaces admite la versión compilada de php, no qué se está utilizando. Sin embargo, encontré otro método que puede funcionar de manera más confiable.

Coloque un archivo en su lugar llamado phpinfo.php que contiene el texto: <? php phpinfo(); ?>

Verifique la variable \_ENV["REDIRECT_HANDLER"]:
Si se establece en php5-fastcgi (o algo más fastcgi-ish), la solicitud probablemente pasará por FastCGI . Si está configurado en application/x-httpd-php (o supongo algo diferente a lo anterior), está utilizando CGI .

Sin embargo, una manera segura es mediante una pequeña prueba. Necesita la herramienta ab (Apache Bench) para esto.
Con y sin CGI, ejecute esto desde otra máquina:

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

Verifique la línea Time taken for tests:. Al menos en mi caja, accediendo a mi VPS a través de una conexión ADSL de 1.3Mbps, FastCGI lo maximizó por completo, mientras que con CGI solo pudo llenar la mitad.

Espero que esto ayude.

php_sapi_name () o PHP_SAPI, ambos funcionan.

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 archivo .htaccess con reglas de reescritura para habilitar URLs amigables para motores de búsqueda. Si está utilizando Apache, deberá configurar & Quot; AllowOverride FileInfo & Quot; para el directorio que contiene su instalación de joomla. Si está utilizando IIS, necesitará un módulo como IISModRewrite. Aquí hay instrucciones para esto: [ http://www.micronovae.com/ModRewrite/ artículos / SEFJoomla.html]

Debería ver una referencia a ella desde

<?php
phpinfo();
?>

API del servidor = CGI / FastCGI

Asegúrese de que las cosas estén configuradas inicialmente donde el script falla por completo cuando fastcgi no se está ejecutando. Entonces sabrás, cuando funcione, que el demonio fastcgi es la razón.

Esto funcionó para mí.

/**
 * 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');
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top