2015-08-27 14 views
8

Il sito Web del mio cliente è attualmente in esecuzione su un server Apache con mod_php. Tutti i percorsi dell'applicazione sono definiti nel file .htaccess (vedi il codice sotto). Ora sta provando a migrare verso un server che esegue apache e php-fastcgi, ma i percorsi non funzionano a lungo.Nessun file di input specificato - apache e php-fastcgi

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    # Redirect 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule "^noticias/?$" index.php/noticias/frontend/list/ [L,QSA] 
    RewriteRule ^.*$ index.php [NC,L] 

</IfModule> 

Quando accedo http://domain.tld/noticias, ricevo No input file specified, e nella Apache error_log [fcgid:warn] mod_fcgid: stderr: PHP Warning: Unknown: function '1' not found or invalid function name in Unknown on line 0, ma se accedo al percorso direttamente http://domain.tld/index.php/noticias/frontend/list/ funziona benissimo.

UPDATE

ho trovato una soluzione di lavoro che cambia alcuni dei comportamenti quadro. Se qualcuno ha una soluzione senza dover modificare il framework (probabilmente nella configurazione di apache o php), assegnerò gadget la risposta alla taglia.

+0

è mod_rewrite installato sul nuovo server? – Pipe

+0

@Pipe Sì, ho eseguito altri test per verificarlo. – LucasFerreira

+0

Quale hosting stai utilizzando? – Bugfixer

risposta

5

Come sugested da @ user3584460, ho deciso di cambiare tutti i miei percorsi di passare il controller/azione desiderata come parametro querystring. Ecco come è stato fatto.

ho cambiato tutte le rotte per passare un parametro _url:

RewriteRule "^noticias/?$" index.php?_url=/noticias/frontend/list/ [L,QSA] 

In questo modo non vorrei ottenere il "No file di input specificato" errore, ma il quadro (Zend) non riconosce il percorso, e sarebbe mostra sempre la homepage.

Il dispatcher percorso prevede la variabile $requestUri ad essere nel formato index.php/module/controller/action, ma con la variazione del .htaccess, era index.php?_url=/module/controller/action. Quindi ho dovuto apportare alcune modifiche alla classe Zend_Controller_Request_Http, quindi avrebbe effettuato la conversione.

così ho aggiunto le seguenti righe al metodo setRequestUri:

public function setRequestUri($requestUri = null) 
{ 
    // ... 

    // begin changes 
    preg_match('/_url=([a-zA-Z0-9\/\-_\.]+)&?(.*)/', $requestUri, $matches); 
    if (count($matches) == 3) 
     $requestUri = '/index.php' . $matches[1] . '?' . $matches[2]; 
    // end changes 

    $this->_requestUri = $requestUri; 
    return $this; 
} 

Ora funziona benissimo.

2

Cambiare la vostra linea con noticias:

RewriteRule ^noticias/?$ index.php/noticias/frontend/list/ [L] 
+0

Ancora lo stesso errore, e ho bisogno del flag QSA per avere accesso ai parametri della stringa di query. – LucasFerreira

+0

Non c'è bisogno di aggiungere '[QSA]' senza nuova stringa di query. Ma vedo che hai corretto la tua domanda – Croises

1

A volte lo vediamo su siti che usano riscritture. Abbiamo risolto questo problema cambiando la riscrittura. La vecchia linea sarebbe qualcosa di simile:

RewriteRule ^(.*)$ _routing.php/$1 [L] 

Abbiamo cambiato in:

RewriteRule ^(.*)$ _routing.php [L] 

Questo ha risolto il problema.

Problemi correlati