2012-08-22 22 views
6

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.

Respuesta

2

Estaría muy agradecido si alguien pudiera darme una indicación sobre cómo resolver este problema.

Luego le daré un puntero ya que no sé la respuesta. :)

¿Has leído this question donde tuve un problema bastante similar al tuyo?

+0

¡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

+0

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 –

+0

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

1

/~ direcciones URL de nombre de usuario se generan con mod_userdir, mod_rewrite sin embargo Tiras ~ caracteres

a fin de utilizar los archivos .htaccess torta por defecto, y añaden:

RewriteBase /~username/path/to/cake 

a todos los archivos .htaccess involucradas

+0

leí mal ~/username filepath for/~ username url por favor ignore esta respuesta – Ceeram

+0

Esto no ayuda, pero de todos modos, ¡muchas gracias por su ayuda! – bfncs

1

Tradicionalmente, uno redirigirá las solicitudes a una aplicación de CakePHP al nivel /cakephp/app/.

El hecho de que desee interpretar cakephp como nombre de controlador es una muestra de que este es el problema.

Tu problema probablemente esté relacionado con las ALS, pero no es exactamente lo mismo. Lo que realmente quiere, ya que la intención de su aplicación cakephp que aparezca residir en la raíz del servidor cuando se hace realmente no lo es:

RewriteBase/

El otro problema potencial es que su entorno de desarrollo nunca se expone a la de cualquier posibles efectos secundarios relacionados con el archivo .htaccess bajo /cakephp/app.

Lo que me gustaría tratar es la adición de primera RewriteBase relativa a la carpeta/cakephp

  1. en APP/.htaccess: /
  2. en APP/Webroot/.htaccess: /webroot/