php .htaccess symfony

¿Cómo eliminar "web/app_dev.php" de las URL de Symfony2?



.htaccess (7)

  1. // habilitar la reescritura de mod
    sudo a2enmod reescribir

  2. Cambiar todas las apariciones de AllowOverride None por AllowOverride All
    Archivo: ( /etc/apache2/apache2.conf ) o ( /etc/apache2/sites-available/000-default.conf ) - para mí trabajar con el archivo /etc/apache2/apache2.conf.

Ejemplo:

<Directory /var/www/web/> # enable the .htaccess rewrites Options Indexes FollowSymLinks #AllowOverride None #commented AllowOverride All Require all granted </Directory>

  1. // Reiniciar el servicio de apache:
    sudo servicio apache2 reinicio

Acabo de crear mi primer proyecto Symfony2. Pero la parte "/web/app_dev.php" en la URL me molesta. Debería ser posible hacer esto sin hosts virtuales ...

Pero cuando intento esto a través de .htaccess siempre recibo errores de enrutamiento y la "web /" siempre se agrega a la url ...

EDITAR: El proyecto completo también se encuentra en un subdirectorio llamado "symfonyTest". La URL de la página de demostración es "http: //localhost/symfonyTest/web/app_dev.php/demo/" y debería convertirse en "http: // localhost / symfonyTest / demo /". Los enlaces también deben tener esta sintaxis. es posible?


Necesitaría el archivo .htaccess en la carpeta principal de la web , sin embargo, no sugeriría hacerlo. Esa carpeta, además de la web , contiene una fuente completa, binarios, proveedores y mucho más, por lo que deberá aplicar muchas reglas solo para permitir el acceso web a web carpeta web y no permitir el acceso web a todo lo demás.

Entonces, es factible, pero definitivamente iría por una solución de vhost ...


Si usas un host virtual de apache, puedes hacerlo funcionar como desees. Aquí hay un ejemplo de host virtual de mi xampp:

<VirtualHost *:80> ServerName myurl.local # Basic stuff DocumentRoot "C:/path/to/symfony/web" DirectoryIndex app.php <Directory "C:/path/to/symfony/web"> AllowOverride All Allow from All </Directory> </VirtualHost>

Después de reiniciar su Apache, puede acceder al proyecto a través de http: //myurl.local (no olvide configurar su archivo de hosts en C:/Windows/system32/drivers/etc/hosts !). Si desea que el entorno dev (app_dev.php) no aparezca en la url, cambie el DirectoryIndex a app_dev.php.


Symfony2 viene con un modo de depuración incorporado, que es lo que estás usando cuando accedes a las URL con la adición app_dev.php. El modo de depuración almacena en caché significativamente menos que el modo de producción al que se puede acceder dirigiendo su navegador a la url, pero dejando fuera el app_dev.php Si el acceso a esta url no funciona, probablemente significa que necesita borrar su caché de producción.

Para borrar el caché, dirija su terminal (consola de comandos) a la raíz de su proyecto de Symfony. Desde allí escriba el siguiente comando:

php app/console cache:clear --env=prod --no-debug

Según los comentarios a continuación en Symfony 3, esto se ha movido:

php bin/console cache:clear --env=prod --no-debug

Esto debería borrar su caché de producciones y permitirle acceder a las urls sin app_dev.php.

En cuanto a la parte web de la url. La forma más sencilla de eliminarlo es establecer la raíz web de su proyecto en la carpeta web. Es mejor hacer esto con Apache usando hosts virtuales, pero hay formas de hacerlo con htaccess.

Este enlace explica cómo usar el archivo htaccess para cambiar el webroot.

¡Espero que esto ayude!


Yo también solía tener este problema, por favor, mire mis configuraciones y pruébelas

dentro de mi .htaccess:

Hola a todos, también he tenido este problema. Y parece que el "stock" .htaccess es el problema. Resolví esto en mi entorno y aquí está mi .htaccess con notas:

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::/2$ RewriteRule ^(.*) - [E=BASE:%1] RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app_dev.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially RewriteCond %{REQUEST_FILENAME} -f RewriteRule .? - [L] RewriteRule .? %{ENV:BASE}/app_dev.php [L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially </IfModule> <IfModule !mod_rewrite.c> <IfModule mod_alias.c> # When mod_rewrite is not available, we instruct a temporary redirect of # the startpage to the front controller explicitly so that the website # and the generated links can still be used. RedirectMatch 302 ^/$ /app.php/ # RedirectTemp cannot be used instead </IfModule> </IfModule>

dentro de mi entrada "symfony" en / etc / apache2 / sites-available:

<VirtualHost 127.0.1.15> ServerAdmin webmaster@localhost ServerName symfony DocumentRoot /var/www/Symfony/web DirectoryIndex app.php <Directory /var/www/Symfony/web> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>


solo necesita copiar el contenido del archivo .htaccess en your-website.conf

dentro del directorio TAG


<VirtualHost *:80> DocumentRoot "path_to_symfonyTest/web" ServerName "symfonyTest" <Directory "path_to_symfonyTest/web"> DirectoryIndex app_dev.php AllowOverride All Order allow,deny Allow from all RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app_dev.php [QSA,L] RedirectMatch permanent ^/app_dev/.php/(.*) /$1 </Directory> </VirtualHost>

Eso es parte de mi httpd.conf