Tengo que ejecutar mi aplicación CakePHP 2.1 en un entorno con CGI-PHP y sin la posibilidad de declarar alias apache. Quiero redirigir las solicitudes a un subdominio a CakePHP con mod_rewrite, pero esto no funciona.CakePHP, CGI y mod_rewrite
configuración actual
- Webroot es
~/user/public_html
- CakePHP está en
~/user/public_html/cakephp/
- CakePHP deben solicitarse como
dev.mydomain.tld
Lo que tengo hasta ahora es esto (todos los caminos relativa 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]
El problema
Solicitudes de alguna manera no están distribuidos correctamente (la aplicación se ejecuta sin problemas en mi entorno de desarrollo con PHP como módulo y un host virtual en el nivel /cakephp/app/webroot/
). Cuando solicito la página de inicio al dev.mydomain.tld
solo obtengo un error, Cake me dice que falta el CakephpController.
información de depuración
las partes interesantes de
$_SERVER
depurado como la primera línea en/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
las partes interesantes del objeto
CakeRequest
pasado al expedidor:url => 'cakephp/app/webroot/index.php' base => '/cakephp' webroot => '/app/webroot/' here => '/cakephp/cakephp/app/webroot/index.php'
La pregunta
lo tanto, lo que no entiendo aquí, es por qué el objeto CakeRequest tiene referencias a mi estructura de carpetas mientras $_SERVER['REQUEST_URI'] == '/'
. ¿Qué tendría que hacer para entender esto? Y, en primer lugar, ¿dónde debería buscar el problema: en las directivas mod_rewrite o en CakePHP? Probé algunas cosas, incluso estableciendo RewriteBase en los archivos .htaccess y diferentes configuraciones para App.baseUrl
en el objeto de configuración, pero nada parecía ayudar aquí.
Estaría muy agradecido si alguien pudiera darme una indicación sobre cómo resolver este problema.
¡Gracias por el puntero! No lo leí antes, pero tienes razón, parece bastante similar. Es una pena que la solución propuesta no ayude en mi caso también. Probablemente voy a vincular mi 'app/webroot' al webroot duro para evitar esto, lo que seguro solo moverá el problema al futuro. Todavía estaría realmente interesado en resolver esto, incluso más después de ver que tuviste el mismo problema. P.S .: Ningún WAMP involucrado aquí. – bfncs
Puede leer esto también, especialmente los comentarios, así es como resolví mi problema: http://bakery.cakephp.org/articles/BBBThunda/2010/02/25/troubleshooting-cakephp-installation-issues-related-to- apache-2-mod_rewrite-for-beginners –
ALS, finalmente elegí tu respuesta porque se acercaba más a lo que necesitaba y no quería perder los puntos. Es bastante seguro, que hubo una extraña configuración errónea del servidor por parte del proveedor de alojamiento y están trabajando para solucionarlo. Hasta ahora, estoy sobreescribiendo los valores en '$ _SERVER' con valores predeterminados razonables. Eso es realmente feo, pero funciona como una solución alternativa hasta que se haya solucionado esa configuración del servidor. – bfncs