2012-02-27 13 views
5

que he hecho una primera instalación de Symfony2,¿Cómo me deshago de la necesidad de "/app.php/" en la nueva URL de producción de la aplicación Symfony2?

php app/console --version 
     Symfony version 2.0.11 - app/dev/debug 

He instalado bajo un DocumentRoot existente mediante la configuración de mi servidor host virtual apache2

<VirtualHost 127.0.0.1:80> 
     ... 
     DocumentRoot /srv/www/localhost_www 
     ... 
     <Directory "/srv/www/localhost_www" > 
      AllowOverride none 
      Options -ExecCGI +FollowSymLinks +Includes +Indexes +MultiViews 
      Order Allow,Deny 
      Allow from All 
     </Directory> 
     ... 
     Alias /TESTAPP "/srv/www/TESTAPP/web/" 
     <Directory "/srv/www/TESTAPP/web/"> 
      Options All 
      AllowOverride All 
      Allow from All 
     </Directory> 

     Alias /TESTAPP.symfony "/srv/www/TESTAPP/" 
     <Directory "/srv/www/TESTAPP/"> 
      Options All 
      AllowOverride All 
      Allow from All 
     </Directory> 
     ... 

Después de un bien instalar, y con éxito después de "El Libro "para construir la maqueta 'Hola' de la aplicación, si NAV en un navegador para cualquier/todos,

dev: 
     http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME 
     http://localhost/TESTAPP/app_dev.php/hello/ME 
    prod: 
     http://localhost/TESTAPP.symfony/web/app.php/hello/ME 
     http://localhost/TESTAPP/app.php/hello/ME 

veo la esperada,

"Hello ME!"

Quiero volver a escribir solamente las direcciones URL de producción, ocultando "app.php" para que el siguiente conjunto de direcciones URL funciona en la barra de navegación de un navegador para mi aplicación Symfony2:

dev: 
     http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME 
     http://localhost/TESTAPP/app_dev.php/hello/ME 
    prod: 
    !! http://localhost/TESTAPP.symfony/web/hello/ME 
    !! http://localhost/TESTAPP/hello/ME 

IIUC , el predeterminado web/.htaccess

 cat web/.htaccess 
       <IfModule mod_rewrite.c> 
        RewriteEngine On 
        RewriteCond %{REQUEST_FILENAME} !-f 
        RewriteRule ^(.*)$ app.php [QSA,L] 
       </IfModule> 

necesita cambiar.

Yo he cavado alrededor en la documentación y en la web, intentado recomendaciones vdiffferent para modding la RewriteRule, añadiendo 'RedirectMatch permanente', etc., y no estoy gestión para obtener un simple

http://localhost/TESTAPP/hello/ME

para que funcione. Siempre parece necesitar agregar "/app.php/".

¿Cuáles son los cambios específicos que tendría que hacer para que esto funcione?

Gracias.


@chasen

está habilitado el mod_rewrite de Apache?

si tienes tu archivo .htaccess en su directorio web

hago

y alojar el archivo que apunta a la carpeta web del

es, como el anterior, no se necesita el

Alias /TESTAPP "/srv/www/TESTAPP/web/" 
     <Directory "/srv/www/TESTAPP/web/"> 

app.php.

ese es mi problema. sin eso, no funciona para mí.

Específicamente,

https://localhost/TESTAPP/app.php/hello/ME 

devuelve:

"¡Hola Me"

pero

https://localhost/TESTAPP/hello/ME 

vuelve

Object not found! 

The requested URL was not found on this server. 
If you entered the URL manually please check your 
spelling and try again. 

If you think this is a server error, please contact 
the webmaster. 
Error 404 

Respuesta

14

sé que es una pregunta tonta, pero está habilitado el mod_rewrite de Apache?

si tiene su archivo .htaccess en su directorio web y el archivo de host apuntando a la carpeta web, la aplicación.php no debería ser necesaria.

Si está ejecutando Ubuntu o una distribución semejante que puede hacer:

sudo a2enmod rewrite 
sudo service apache2 reload 
sudo service apache2 restart 

que debería permitir el Ministerio de Defensa, y volver a cargar Apache.

EDIT:

Esa respuesta que está recibiendo de vuelta es en una página Symfony? si se trata de su probable que la memoria caché prod necesita ser limpiado, desde el directorio raíz de la aplicación utilice la consola de Symfony para borrar la caché:

php app/console cache:clear --env="prod" 

EDIT:

Si ninguno de los que han trabajado puede intentar añadir un RewriteBase al archivo .htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /TESTAPP 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule> 
+0

ver la respuesta anterior en OP –

+0

He actualizado mi respuesta con algo nuevo para probar. – chasen

+0

Sí, es una página de Symfony. He eliminado varias veces las memorias caché de prod y dev, me he asegurado de que la memoria caché del navegador esté desactivada, reinicie apache, incluso reinicie el servidor, por las dudas. Como se informó, la URL sin-app.php falla sistemáticamente. –

0

adición de la regla RewriteBase con el nombre de la carpeta en la que el proyecto se lleva a cabo en el fichero .htaccess hace su trabajo! ¡Gracias!

RewriteBase /project_name 
3

En mi caso, necesito modificar la línea que contiene AllowOverride None para leer AllowOverride All. Esto le dice a Apache que está bien permitir que los archivos .htaccess anulen las directivas anteriores. Debe volver a cargar Apache antes de este cambio tendrá un efecto (https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles):

Haga lo siguiente: - ir a la sección "/ etc/apache2" archivo de modificar "apache2.conf":

<Directory /var/www/> 
    Options FollowSymLinks 
    AllowOverride All 
    Require all granted 

servidor
  • reinicio:/etc/apache2 # service apache2 restart

que debería funcionar. Si no funciona, igual has hecho 1 paso a la derecha para asegurar .htaccess puede anular. Hay muchas otras razones que se pueden corregir con la instrucción anterior.

Cuestiones relacionadas