¿Cómo eliminar "web/app_dev.php" de las URL de Symfony2?
.htaccess (7)
// habilitar la reescritura de mod
sudo a2enmod reescribirCambiar 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>
- // 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