Je viens de créer mon premier projet Symfony2. Mais la partie "/web/app_dev.php" de l'URL m'énerve. Il devrait être possible de faire ceci sans hôtes virtuels ...
Mais quand j'essaie cela avec .htaccess, je reçois toujours des erreurs de routage et le "web /" est toujours ajouté à l'URL ...
EDIT: Le projet entier se trouve également dans un sous-répertoire nommé "symfonyTest". L'URL de la page de démonstration est "http: //localhost/symfonyTest/web/app_dev.php/demo/" et doit devenir "http: // localhost/symfonyTest/demo /". Les liens devraient aussi avoir cette syntaxe. Est-ce possible?
Symfony2 est livré avec un mode de débogage intégré, qui correspond à ce que vous utilisez lorsque vous accédez à des URL avec l’ajout app_dev.php. Le mode de débogage met en cache beaucoup moins que le mode de production auquel vous pouvez accéder en dirigeant votre navigateur vers l'URL, mais en laissant de côté le fichier app_dev.php. Si l'accès à cette URL ne fonctionne pas, cela signifie probablement que vous devez vider votre cache de production.
Pour effacer le cache, dirigez le terminal (console de commande) à la racine de votre projet Symfony. A partir de là, tapez la commande suivante:
php app/console cache:clear --env=prod --no-debug
Par commentaires ci-dessous dans Symfony 3 cela a déplacé:
php bin/console cache:clear --env=prod --no-debug
Cela devrait vider votre cache de productions et vous permettre d'accéder aux URL sans le fichier app_dev.php.
En ce qui concerne la partie Web de l'URL. Le moyen le plus simple de le supprimer consiste à définir la racine Web de votre projet dans le dossier Web. Il est préférable de le faire avec Apache en utilisant des hôtes virtuels, mais il existe des moyens de le faire avec htaccess.
Ce lien explique comment utiliser le fichier htaccess pour modifier la racine Web . http://kb.siteground.com/how_to_change_my_document_root_folder_using_an_htaccess_file/
J'espère que cela t'aides!
<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>
Cela fait partie de mon httpd.conf
J'avais aussi ce problème, jetez un coup d'œil à mes configurations et essayez-les
dans mon .htaccess:
Salut à tous, j'ai eu ce problème aussi. Et il semble que le "stock" .htaccess est le problème. J'ai résolu ceci dans mon environnement et voici mon .htaccess avec notes:
<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>
dans mon entrée "symfony" dans/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>
Si vous utilisez un hôte virtuel Apache, vous pouvez le faire fonctionner comme vous le souhaitez. Voici un exemple d'hôte virtuel de mon 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>
Après avoir redémarré votre Apache, vous pouvez accéder au projet via http: //myurl.local (n'oubliez pas de configurer votre fichier hosts sous C:\Windows\system32\drivers\etc\hosts
!). Si vous souhaitez que l'environnement dev (app_dev.php) n'apparaisse pas dans l'URL, remplacez DirectoryIndex par app_dev.php.
// active la réécriture du mod
Sudo a2enmod rewrite
Changer toutes les occurrences de AllowOverride None by AllowOverride All
Fichier: ( /etc/Apache2/Apache2.conf ) ou ( /etc/Apache2/sites-available/000-default.conf ) - pour moi, travaillez avec /etc/Apache2/Apache2.conf fichier.
Exemple:
<Directory /var/www/web/>
# enable the .htaccess rewrites
Options Indexes FollowSymLinks
#AllowOverride None #commented
AllowOverride All
Require all granted
</Directory>
Vous auriez besoin du fichier .htaccess
dans le dossier parent de web
; toutefois, je ne le recommanderais pas. Ce dossier, en plus de web
, contient le code source complet, les fichiers binaires, les fournisseurs et bien plus encore. Vous devez donc appliquer de nombreuses règles uniquement pour autoriser l'accès Web au dossier web
et interdire l'accès à Internet à tout le reste.
Donc, c'est faisable, mais j'opterais certainement pour la solution vhost ...
il vous suffit de copier le contenu du fichier .htaccess
dans le your-website.conf
dans l'annuaire TAG