web-dev-qa-db-fra.com

Comment supprimer "web/app_dev.php" des URL Symfony2?

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?

18
phil-opp

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!

21
Shattuck
<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

11
usrmrz

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>
10

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.

5
Sgoettschkes
  1. // active la réécriture du mod 
    Sudo a2enmod rewrite

  2. 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>
  1. // Redémarrez le service Apache: 
    Service Sudo Apache2 redémarrer
2
Jzapata

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 ...

2
Jovan Perovic

il vous suffit de copier le contenu du fichier .htaccess dans le your-website.conf

dans l'annuaire TAG

0
user2948817