2012-08-22 12 views
6

Devo eseguire la mia applicazione CakePHP 2.1 in un ambiente con CGI-PHP e senza la possibilità di dichiarare alias Apache. Voglio reindirizzare le richieste a un sottodominio a CakePHP con mod_rewrite, ma questo non funziona.CakePHP, CGI e mod_rewrite

configurazione attuale

  • Webroot è ~/user/public_html
  • CakePHP è in ~/user/public_html/cakephp/
  • CakePHP deve essere richiesto al dev.mydomain.tld

Quello che ho fino ad ora è questo (tutti i percorsi relativi a webroot):

  • ~/user/public_html/.htaccess

    RewriteEngine on 
    Options +FollowSymlinks 
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] 
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] 
    RewriteCond %{REQUEST_URI} !/$ 
    RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d 
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L] 
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] 
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] 
    RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L] 
    
  • ~/user/public_html/cakephp/app/webroot/.htaccess

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
    

Il problema

Le richieste non siano in qualche modo instradati correttamente (l'applicazione viene eseguita senza problemi nel mio ambiente di sviluppo con PHP come modulo e un host virtuale al livello /cakephp/app/webroot/). Quando richiedo la home page allo dev.mydomain.tld, ricevo solo un errore, mi sta dicendo Cake, che manca il CakePHPController.

informazioni di debug

  • le parti interessanti $_SERVER debug come prima riga in /cakephp/app/webroot/index.php

    [REDIRECT_REDIRECT_REDIRECT_STATUS] => 200 
        [REDIRECT_REDIRECT_STATUS] => 200 
        [REDIRECT_HANDLER] => php-script 
        [REDIRECT_STATUS] => On 
        [HTTP_HOST] => dev.mydomain.tld 
        [HTTP_CONNECTION] => keep-alive 
        [SERVER_SOFTWARE] => Apache/2.2.21 (Unix) 
        [SERVER_NAME] => dev.mydomain.tld 
        [SERVER_ADDR] => 192.0.43.10 
        [SERVER_PORT] => 80 
        [DOCUMENT_ROOT] => /home/user/public_html 
        [SCRIPT_FILENAME] => /home/user/public_html/cakephp/app/webroot/index.php 
        [REDIRECT_URL] => /cakephp/app/webroot/index.php 
        [GATEWAY_INTERFACE] => CGI/1.1 
        [SERVER_PROTOCOL] => HTTP/1.1 
        [REQUEST_METHOD] => GET 
        [QUERY_STRING] => 
        [REQUEST_URI] =>/
        [SCRIPT_NAME] => /cakephp/app/webroot/index.php 
        [_PHP5_WORK_DIR] => /home/user/public_html/cakephp/app/webroot 
        [PHP_SELF] =>/
        [ORIG_PATH_INFO] => 
        [ORIG_PATH_TRANSLATED] => /home/user/public_html/cakephp/app/webroot/index.php 
        [PATH_INFO] => /cakephp/app/webroot/index.php 
    
  • le parti interessanti dell'oggetto CakeRequest passato al dispatcher:

    url => 'cakephp/app/webroot/index.php' 
        base => '/cakephp' 
        webroot => '/app/webroot/' 
        here => '/cakephp/cakephp/app/webroot/index.php' 
    

La domanda

Allora, che cosa non capisco qui, è il motivo per cui l'oggetto CakeRequest ha riferimenti alla mia struttura di cartelle, mentre $_SERVER['REQUEST_URI'] == '/'. Cosa dovrei fare, per farlo bene? E in primo luogo, dove dovrei cercare il problema: nelle direttive mod_rewrite o nello stesso CakePHP? Ho provato alcune cose, inclusa l'impostazione del RewriteBase in alle .htaccess file e diverse impostazioni per App.baseUrl nell'oggetto Configuration, ma nulla sembrava essere d'aiuto.

Sarei davvero grato se qualcuno potesse darmi un puntatore su come risolvere questo problema.

risposta

2

Sarei davvero grato se qualcuno potesse darmi un suggerimento su come risolvere questo problema.

Quindi ti darò un puntatore perché non conosco la risposta. :)

Hai letto this question dove ho avuto un problema del tutto simile al tuo?

+0

Grazie per il puntatore! Non l'ho letto prima, ma hai ragione, sembra abbastanza simile. È un peccato che la soluzione proposta non sia d'aiuto anche nel mio caso. Probabilmente collegherò la mia app/webroot all'hard webroot per aggirare questo problema, che di sicuro sposteremo il problema solo in futuro. Sarei ancora molto interessato a risolvere questo problema, ancora di più dopo aver visto che hai avuto lo stesso problema. P.S .: Nessuna WAMP coinvolta qui. – bfncs

+0

Puoi leggere anche questo, specialmente i commenti, ecco come ho risolto il mio problema: http://bakery.cakephp.org/articles/BBBThunda/2010/02/25/troubleshooting-cakephp-installation-issues-related-to- apache-2-mod_rewrite-per-principianti –

+0

ALS, alla fine ho scelto la tua risposta perché si avvicinava di più a ciò di cui avevo bisogno e non volevo sprecare i punti. È abbastanza sicuro che ci sia stato uno strano errore di configurazione del server da parte dell'hoster coinvolto e stanno lavorando per risolverlo. Così a lungo, sto sovrascrivendo i valori in '$ _SERVER' con valori predefiniti ragionevoli. Questo è davvero, davvero brutto, ma funziona come soluzione temporanea fino a quando quella configurazione del server non è stata corretta. – bfncs

1

/~ gli URL nome utente vengono generati con mod_userdir, mod_rewrite Strisce comunque ~ caratteri

in modo da utilizzare i file .htaccess torta di default, e aggiungono:

RewriteBase /~username/path/to/cake 

a tutti i file .htaccess coinvolti

+0

ho letto male ~/nomefile percorso file per/~ nome utente url per favore ignora questa risposta – Ceeram

+0

Questo non aiuta comunque, grazie mille per il tuo aiuto! – bfncs

1

Tradizionalmente uno reindirizza le richieste a un'applicazione CakePHP al livello /cakephp/app/.

Il fatto che desideri interpretare cakephp come nome del controller è un omaggio che questo è il problema.

Il tuo problema è probabilmente correlato a SLA ma non esattamente lo stesso. Che cosa si vuole realmente, perché si intende per il vostro cakephp app per apparire a risiedere alla radice del server quando si fa in realtà non lo è:

RewriteBase/

L'altro potenziale problema è che l'ambiente dev non è mai esposta al qualsiasi potenziali effetti collaterali relativi al file .htaccess sotto /cakephp/app.

Quello che vorrei provare è prima di aggiungere RewriteBase relativo alla cartella/cakephp

  1. in app/.htaccess: /
  2. in app/webroot/.htaccess: /webroot/