web-dev-qa-db-fra.com

Apache VirtualHost et localhost

Je travaille avec XAMPP sur Mac OS X. J'essaie de gérer correctement un site Web symfony pour un client. Je ne sais vraiment pas (encore) symfony, je veux simplement l'installer et le lancer.

J'ai changé mon etc/hosts de cette façon:

127.0.0.1 www.mysite.local       

et le httpd.conf de cette façon:

<VirtualHost *:80>
  ServerName www.mysite.local
  DocumentRoot /Applications/MAMP/htdocs/mysite/web
  DirectoryIndex index.php
  <Directory /Applications/MAMP/htdocs/mysite/web>
    AllowOverride All
    Allow from All
  </Directory>
  Alias /sf /Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf
  <Directory "/Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Maintenant, le site fonctionne (yay!), Mais je ne peux plus accéder à aucun de mes autres sites locaux car localhost est rendu en tant que www.mysite.local. Où je me trompe?

Je vous remercie!

60
Angelica Rosa

Ceci est normal si vous le voyez. Comme il s'agit de la première entrée d'hôte virtuel, il affiche l'hôte local.

Disons par exemple que vous ne voulez pas que cette page apparaisse. Tout ce que vous voulez afficher, c'est Apache ça fonctionne: vous devez donc créer une entrée vhost avant mysite.local en tant qu'hôte local et le diriger vers la page ça marche.

Mais c'est normal. J'ai eu ce problème avant alors ne vous inquiétez pas!

24

Cela a fonctionné pour moi!

Pour exécuter des projets comme http://localhost/projectName

<VirtualHost localhost:80>
   ServerAdmin localhost
    DocumentRoot path/to/htdocs/
    ServerName localhost
</VirtualHost>

Pour exécuter des projets comme http://somewebsite.com localement

<VirtualHost somewebsite.com:80>
     ServerAdmin [email protected]
     DocumentRoot /path/to/htdocs/somewebsiteFolder
     ServerName www.somewebsite.com
     ServerAlias somewebsite.com
</VirtualHost>

Idem pour les autres sites

<VirtualHost anothersite.local:80>
     ServerAdmin [email protected]
     DocumentRoot /path/to/htdocs/anotherSiteFolder
     ServerName www.anothersite.local
     ServerAlias anothersite.com
</VirtualHost>
90
Ganatra

localhost sera toujours redirigé vers 127.0.0.1. Vous pouvez tromper cela en nommant votre autre VirtualHost en une autre adresse de bouclage local, telle que 127.0.0.2. Assurez-vous également de changer le fichier hosts correspondant pour implémenter cela.

Par exemple, mon httpd-vhosts.conf ressemble à ça:

<VirtualHost 127.0.0.2:80>
    DocumentRoot "D:/6. App Data/XAMPP Shared/htdocs/intranet"
    ServerName intranet.dev
    ServerAlias www.intranet.dev
    ErrorLog "logs/intranet.dev-error.log"
    CustomLog "logs/intranet.dec-access.log" combined

    <Directory "D:/6. App Data/XAMPP Shared/htdocs/intranet">
        Options Indexes FollowSymLinks ExecCGI Includes
        Order allow,deny
        Allow from all
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

(Notez que dans <VirtualHost> section j'ai tapé 127.0.0.2:80. Cela signifie que ce bloc de VirtualHost n’affectera que les requêtes adressées à l’adresse IP 127.0.0.2 Port 80, qui est le port par défaut pour HTTP.

Pour router le nom intranet.dev correctement, ma ligne d’entrée hosts ressemble à ceci:

127.0.0.2 intranet.dev

De cette façon, cela vous évitera de créer un autre bloc VirtualHost pour localhost, ce qui est inutile.

27
Saiful

vous voudrez peut-être utiliser ceci:

<VirtualHost *:80>
    DocumentRoot "somepath\Apache2.2\htdocs"
    ServerName localhost 
</VirtualHost>
<VirtualHost *:80>

en tant que premier hôte virtuel (placez-le devant un autre hôte virtuel)

11
John Smith

J'ai eu le même problème d'accès à localhost lorsque je travaillais avec virtualHost. J'ai résolu en ajoutant le nom dans virtualHost listen code comme ci-dessous -

Dans mon fichier hôtes, j'ai ajouté le code ci-dessous (C:\Windows\System32\drivers\etc\hosts) -

127.0.0.1       main_live

Et dans mon httpd.conf j'ai ajouté le code ci-dessous -

<VirtualHost main_live:80>
    DocumentRoot H:/wamp/www/raj/main_live/
    ServerName main_live
</VirtualHost>

C'est ça. Cela fonctionne, je peux utiliser les deux localhost, phpmyadmin, ainsi que main_live (Mon projet virtuel) simultanément.

8
Raj

Description supplémentaire pour la réponse de John Smith tiré de la documentation officielle . Pour comprendre pourquoi c'est.

L'hôte principal s'en va

Si vous ajoutez des hôtes virtuels à un serveur Web existant, vous devez également créer un bloc pour l'hôte existant . Les noms ServerName et DocumentRoot inclus dans cet hôte virtuel doivent être identiques aux noms globaux ServerName et DocumentRoot. Répertoriez d'abord cet hôte virtuel dans le fichier de configuration pour qu'il agisse en tant qu'hôte par défaut.

Par exemple, pour fonctionner correctement avec XAMPP, pour éviter que VirtualHost ne remplace l'hôte principal, ajoutez des lignes de suivi dans httpd-vhosts.conf

# Main Host
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/xampp/htdocs"
</VirtualHost>

# Additional Host
<VirtualHost *:80>
    # over directives there
</VirtualHost>
5
SiZE

Pour quelqu'un qui fait tout ce qui est décrit ici et qui n'a toujours pas accès:
Xampp avec Apache 2.4:

sur httpd-vhost.conf

<VirtualHost *>
    DocumentRoot "D:/xampp/htdocs/dir"
    ServerName something.dev
   <Directory "D:/xampp/htdocs/dir">
    Require all granted #Apache v 2.4.4 uses just this
   </Directory>
</VirtualHost>


Pas besoin de port, ni d'ip ici, Apache le configure sur ses propres fichiers. Pas besoin de NameVirtualHost *: 80, c'est obsolète, vous pouvez l'utiliser, mais ne faites aucune différence.

Ensuite, pour éditer des hôtes, vous DEVEZ exécuter le bloc-notes en tant qu'administrateur (si vous éditez le fichier sans le faire, vous éditez un pseudo fichier, pas l'original (oui, il enregistre et merde, mais ce n'est pas le fichier réel)
Dans les fenêtres:

Icône de recherche de bloc-notes, clic droit, exécution en tant qu'administrateur, ouverture de fichier, allez à c:/windows/system32/driver/etc/hosts, cochez la case "voir tous les fichiers", ouvrez des hôtes.

Si vous l'aviez déjà modifiée auparavant, vous verrez probablement que ce n'est pas le fichier que vous aviez précédemment modifié sans être exécuté en tant qu'administrateur.

Puis à vérifier si Apache lit votre httpd-vhost.conf , allez dans xampFolder/Apache/bin, shift + clic droit, ouvrez la commande de terminal ici, ouvrez xampp (comme vous le faites habituellement), démarrez Apache, puis sur la ligne de commande, tapez httpd -S, vous verrez une liste des hôtes virtuels, vérifiez si votre quelque chose.dev est là.

5
sagits

Il suffit de changer <VirtualHost *:80> à <VirtualHost 127.0.0.1:80>.

Alors par défaut, DocumentRoot servira pour tous les domaines ou toutes les adresses IP pointant vers votre serveur et spécifiant VirtualHost fonctionnant.

3
SaEEd

Selon cette documentation: support d’hôte virtuel basé sur un nom

Il se peut que vous manquiez la directive suivante:

NameVirtualHost *:80
2
Bjarni Rúnar

cela est peut-être dû au fait que votre dossier Web (comme indiqué "/ Applications/MAMP/htdocs/mysite/web") est vide.

Ma suggestion est d'abord de faire votre projet et ensuite de travailler sur la création d'hôte virtuel. Je suis allé avec une situation similaire. J'utilisais un dossier vide dans le DocumentRoot dans httpd-vhosts.confiz et je ne peux pas accéder à mon shahg101.com site

0
Shahmir

Je suis sous Ubuntu 16.04, voici ce qui a fonctionné pour moi:

  1. Ouvrez un terminal et cd à /etc/Apache2/sites-available. Vous y trouverez un fichier nommé 000-default.conf.
  2. Copiez ce fichier: cp 000-default.conf example.local.conf
  3. Ouvrez ce nouveau fichier (j'utilise Nano; utilisez ce avec quoi vous êtes à l'aise).
  4. Vous verrez beaucoup de lignes commentées que vous pouvez supprimer.
  5. Changement <VirtualHost *:80> à <VirtualHost example.local:80>
  6. Changez la racine du document pour refléter l'emplacement de vos fichiers.
  7. Ajoutez la ligne suivante: ServerName example.local Et si vous en avez besoin, ajoutez cette ligne: ServerAlias www.example.local
  8. Enregistrez le fichier et redémarrez Apache: service Apache2 restart

Ouvrez un navigateur et accédez à example.local. Vous devriez voir votre site web.

0
Kenneth Odle