Pergunta

Eu tenho um site hospedado e eu estou tendo problemas para configurar Joomla (executando o Joomla + php + mysql no IIS7 + Windows Server 2008). Eu tenho uma configuração semelhante rodando em uma máquina local (Joomla + php + mysql no IIS7 + Vista x64), então eu era pelo menos capaz de seguir instruções mostraram em vários tutoriais sobre como configurar isso.

Este sintoma com o site hospedado é que eu não posso ligar quaisquer configurações de SEO no Joomla (nem mesmo a primeira configuração, "Search Engine Friendly URLs"). Recebo quer 404 (arquivo não encontrado) ou a URL corretamente aparece reescrito mas é sempre o conteúdo da casa de página que é exibida. Eu tive um problema semelhante na minha máquina em casa e ele acaba por ter sido porque eu não estava usando FastCGI para php host, então eu decidi investigar isso no site hospedado.

De qualquer forma, eu notei no arquivo web.config do directório de hospedagem Joomla no site hospedado a seguinte linha:

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

A experiência do passado, eu sei que o PHP tem alguns problemas quando não estiver sendo executado sob fastCGI. Notei o web.config na raiz pasta usada a seguinte linha em vez disso:

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

Copiei que no web.config no diretório Joomla, e tem comportamento diferente ... mas ainda não está funcionando. Se eu carregar um arquivo .php no diretório Joomla que executa phpinfo (), sob Server API diz CGI / FastCGI. Se que confirmação positiva que FastCGI está sendo usado? Por que o manipulador no ponto de configuração web para módulos = "CgiModule" em vez de módulos = "FastCgiModule" (Eu nem tenho certeza que existe, mas eu apenas encontrar a menção de CgiModule suspeito).

É um site hospedado, assim, tanto quanto eu sei que não tem acesso ao arquivo ApplicationHost.config ...

Foi útil?

Solução

Aqui está um teste simples:

  1. Crie um arquivo phpinfo.php com

 <?php phpinfo(); ?> 

dentro;

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

  2. Verifique a saída de phpinfo e olhar para _SERVER [ "REQUEST_URI"].

Se esta variável está faltando, então CGI é usado. Se a variável está presente e correctamente definida para /phpinfo.php/foobar?foo=bar, em seguida, quer ISAPI ou FastCGI é usado. Olhe perto da parte superior da saída de API Server; deve ser definida para ISAPI (que ISAPI meios está sendo usado) ou CGI / FastCGI (o que significa FastCGI está sendo usado, uma vez que já descartou CGI).

Outras dicas

Você pode usar (no CentOS) apachectl -M, você vai mostrar quais módulos estão habilitados:

apachectl -M:

file_cache_module (compartilhado) mem_cache_module (compartilhado) version_module (compartilhado) fastcgi_module (compartilhado)

Infelizmente, o \_SERVER["REQUEST_URI"] verificação não funcionou para mim. Usando CGI ou FastCGI /phpinfo.php/foobar?foo=bar, é sempre exibido.

Nem vendo se Server API = CGI/FastCGI foi criado - que só diz o que faz a interface da versão compilada do suporte PHP, não o que está sendo usado. No entanto, eu encontrei um outro método que pode funcionar de forma mais confiável.

Plonk um arquivo no lugar chamado phpinfo.php que contém o texto: <? php phpinfo(); ?>

Verifique se o \_ENV["REDIRECT_HANDLER"] variável:
Se ele é definido como php5-fastcgi (ou qualquer outra coisa fastcgi-ish) o pedido provavelmente passou por FastCGI . Se ele é definido como application/x-httpd-php (ou eu assumo algo diferente do acima), você está usando CGI .

No entanto, uma maneira infalível é executando um pequeno teste. Você precisa a ferramenta ab (Apache Bench) para isso.
Com e sem CGI, executar este a partir de outra máquina:

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

Verifique a Time taken for tests: line. Na minha caixa de, pelo menos, o acesso a meus VPS através de uma conexão 1.3Mbps ADSL, FastCGI maxed completamente para fora, enquanto que com CGI só foi capaz de preencher metade.

Espero que isso ajude.

php_sapi_name () ou PHP_SAPI, tanto trabalho.

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 cria um arquivo .htaccess com regras de reescrita nele para permitir URLs motor de busca amigável. Se você estiver usando Apache você precisa ter para definir "AllowOverride FileInfo" para o diretório que contém a instalação do Joomla. Se você estiver usando o IIS você vai precisar de um módulo, como IISModRewrite. Aqui estão as instruções para isso: [ http://www.micronovae.com/ModRewrite/ artigos / SEFJoomla.html]

Você deverá ver uma referência a ele a partir

<?php
phpinfo();
?>

Servidor API = CGI / FastCGI

garantir que as coisas são criadas inicialmente para onde o script falha completamente quando fastcgi não está em execução. Então você sabe, quando ele funciona, que daemon fastcgi é a razão.

Isso funcionou para mim.

/**
 * 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top