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.
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
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 –
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