Rendre le fichier de service XAMPP / Apache en dehors de htdocs [fermé]

304

Est-il possible de configurer xampp pour servir un fichier en dehors du htdocsrépertoire?

Par exemple, disons que j'ai un fichier situé comme suit:

C:\projects\transitCalculator\trunk\TransitCalculator.php

et mes fichiers xampp sont normalement servis à partir de:

C:\xampp\htdocs\

(car c'est la configuration par défaut) Existe-t-il un moyen de faire reconnaître et servir Apache par mon TransitCalculator.php fichier sans le déplacer sous htdocs? De préférence, je voudrais qu'Apache serve / ait accès à tout le contenu du répertoire des projets, et je ne veux pas déplacer le répertoire des projets sous htdocs.

modifier: modifié pour ajouter Apache au titre de la question afin de rendre les questions / réponses plus "consultables"

cmcculloh
la source
1
Les balises sont censées être suffisamment consultables, je pense.
icedwater
24
Cette question n'aurait pas dû être close. Ceci est une question XAMPP. Ceci est une question de développeur.
Andrew Koper
15
Andrew Koper, je suis d'accord, mais ce n'est pas surprenant avec le niveau d'inamitié endémique dans toute l'écosphère d'échange de piles à ce stade. ¯_ (ツ) _ / ¯
cmcculloh
Maby hors sujet, mais je veux juste donner un conseil: Parfois, une option consiste à déplacer les répertoires dans votre dossier "htdocs", par exemple. si vous souhaitez pouvoir ouvrir des fichiers dans Google Drive dans localhost;) ( stackoverflow.com/questions/41751330/… )
Gordova
2
Outre toutes les réponses, je voudrais en ajouter une. A partir de PHP 5.4.0, vous pouvez passer à la racine de votre projet en utilisant la ligne de commande et l'exécuter php -S <host>:<port>. Par exemple php -S localhost:80.
radiantshaw

Réponses:

362

D'accord, selon les réponses de pix0r , Sparks et Dave , il semble qu'il y ait trois façons de procéder:


Hôtes virtuels

  1. Ouvrez C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Annuler le commentaire ~ ligne 19 (NameVirtualHost *:80 ).
  3. Ajoutez votre hôte virtuel (~ ligne 36):

    <VirtualHost *:80>
        DocumentRoot C:\Projects\transitCalculator\trunk
        ServerName transitcalculator.localhost
        <Directory C:\Projects\transitCalculator\trunk>
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
  4. Ouvrez votre fichier d'hôtes (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Ajouter

    127.0.0.1 transitcalculator.localhost #transitCalculator

    à la fin du fichier (avant le truc Spybot - Search & Destroy si vous l'avez installé).

  6. Enregistrer (vous devrez peut-être l'enregistrer sur le bureau, modifier les autorisations sur l'ancien fichier d'hôtes (clic droit> propriétés) et copier le nouveau dans le répertoire sur l'ancien (ou renommer l'ancien) si vous utilisez Vista et avoir des problèmes).
  7. Redémarrez Apache.

Vous pouvez maintenant accéder à ce répertoire en naviguant sur http: //transitcalculator.localhost/ .


Créer un alias

  1. À partir de la ~ ligne 200 de votre http.conffichier, copiez tout entre <Directory "C:/xampp/htdocs">et </Directory>(~ ligne 232) et collez-le immédiatement ci-dessous avec C:/xampp/htdocsremplacé par le répertoire souhaité (dans ce cas C:/Projects) pour donner à votre serveur les autorisations appropriées pour le nouveau répertoire.

  2. Trouvez la <IfModule alias_module></IfModule>section (~ ligne 300) et ajoutez

    Alias /transitCalculator "C:/Projects/transitCalculator/trunk"

    (ou tout ce qui est pertinent pour vos désirs) sous le Aliasbloc de commentaires, à l'intérieur des balises du module.


Changer la racine de votre document

  1. Editez ~ la ligne 176 dans C: \ xampp \ apache \ conf \ httpd.conf; changement DocumentRoot "C:/xampp/htdocs"à #DocumentRoot "C:/Projects"(ou tout ce que vous voulez).

  2. Modifiez ~ la ligne 203 pour qu'elle corresponde à votre nouvel emplacement (dans ce cas C:/Projects).


Remarques:

  • Vous devez utiliser des barres obliques "/" au lieu des barres obliques inverses "\".
  • N'incluez pas le "/" de fin à la fin.
  • redémarrez votre serveur .
cmcculloh
la source
13
À l'étape (3) pour modifier les hôtes C: \ Windows \ System32 \ drivers \ etc \. Meilleure pratique pour exécuter l'éditeur (Bloc-notes, Notepad ++ ou tout autre éditeur) en tant qu'administrateur en premier. Vous pouvez donc enregistrer directement dans le dossier C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN
3
Si vous obtenez 403 erreurs, reportez-vous à ce lien
Wojtek Owczarczyk
21
En utilisant Order allow, refusez Allow from all sur Win7 renvoie 403 ERROR car ces options sont déconseillées. Utilisez Exiger tout accordé. stackoverflow.com/questions/9110179/…
hywak
4
Juste pour info, cette étape ne m'a pas semblé nécessaire: Annuler la ligne de commentaire 19 (NameVirtualHost *: 80)
Silverback
2
L'utilisation Order allow,deny Allow from alln'a pas fonctionné pour moi, mais a Require all grantedfonctionné.
Danny Beckett
96

Vous pouvez le déplacer en modifiant le paramètre DocumentRoot dans XAMPP \ apache \ conf \ httpd.conf.

Il devrait être actuellement:

C: / xampp / htdocs

Changez-le en:

C: / projets / transitCalculator / trunk

Dave Ward
la source
40
N'oubliez pas de le modifier dans les DEUX lignes qui demandent DocumentRoot. Si vous ne changez que celui du haut, vous obtiendrez des erreurs d'accès en lecture, etc.
Arcolye
2
cela vaut-il également pour Mac XAMP?
kiwi en colère
maintenant par quelle URL, peut accéder à la page d'index?
Manish Kumar
49

Un VirtualHost fonctionnerait également pour cela et pourrait fonctionner mieux pour vous car vous pouvez héberger plusieurs projets sans avoir besoin de sous-répertoires. Voici comment procéder:

httpd.conf (ou extra \ httpd-vhosts.conf par rapport à httpd.conf. Les barres obliques "\" peuvent l'empêcher de fonctionner):

NameVirtualHost *:80
# ...
<VirtualHost *:80>  
    DocumentRoot C:\projects\transitCalculator\trunk\
    ServerName transitcalculator.localhost
    <Directory C:\projects\transitCalculator\trunk\>  
        Order allow,deny  
        Allow from all  
    </Directory>
</VirtualHost> 

Fichier HOSTS (c: \ windows \ system32 \ drivers \ etc \ hosts généralement):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Redémarrez maintenant XAMPP et vous devriez pouvoir accéder à http: //transitcalculator.localhost/ et il sera directement mappé vers ce répertoire.

Cela peut être utile si vous essayez de répliquer un environnement de production dans lequel vous développez un site qui reposera à la racine d'un nom de domaine. Vous pouvez, par exemple, pointer vers des fichiers avec des chemins absolus qui seront transférés sur le serveur:

<img src="/images/logo.png" alt="My Logo" />

alors que dans un environnement utilisant des alias ou des sous-répertoires, vous auriez besoin de garder une trace exacte de l'emplacement du répertoire "images" par rapport au fichier actuel.

pix0r
la source
J'ai plusieurs lecteurs réseau sur mon PC qui ont été mappés sur des lettres de lecteur (par exemple X:\myfolder). Lorsque j'utilise cette méthode, j'obtiens un avertissement "Accès interdit". Cela signifie-t-il que l'utilisateur Apache n'a pas accès en lecture au lecteur?
harryg
1
Sous DirectoryremplacerOrder allow,deny et Allow from allavec Require all granted. Voir stackoverflow.com/questions/9110179/…
Michiel
16

Vous pouvez configurer Apache pour diffuser des pages de n'importe où avec n'importe quelles restrictions, mais il est normalement distribué sous une forme plus sécurisée.

La modification de vos fichiers apache (http.conf est l'un des noms les plus courants) vous permettra de définir n'importe quel dossier pour qu'il apparaisse dans votre racine Web.

ÉDITER:

alias myapp c: \ myapp \

J'ai modifié ma réponse pour inclure le format de création d'un alias dans le fichier http.conf qui est un peu comme un raccourci dans Windows ou un lien symbolique sous un * x où Apache `` fait semblant '' qu'un dossier est dans la racine Web. Cela vous sera probablement plus utile à long terme.

étincelles
la source
10

Si vous essayez d'obtenir XAMPP pour utiliser un lecteur réseau comme racine de document, vous devez utiliser des chemins UNC dans httpd.conf. XAMPP ne reconnaîtra pas vos lecteurs réseau mappés.

Par exemple, ce qui suit ne fonctionnera pas, DocumentRoot "X: / webroot"

Mais ce sera, DocumentRoot "//192.168.10.100/webroot" (notez les barres obliques, pas les barres obliques inverses)

Jason
la source
Cela fonctionne très bien avec mon lecteur réseau mappé.
Sean Kendle
7

Solution pour permettre à Apache 2 d'héberger des sites Web en dehors de htdocs:

Sous la directive "DocumentRoot" dans httpd.conf, vous devriez voir un bloc de répertoire. Remplacez ce bloc de répertoire par:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory> 

N'OUBLIEZ PAS D'UTILISER CETTE CONFIGURATION DANS UN ENVIRONNEMENT RÉEL

Leandro
la source
Fonctionne uniquement pour les systèmes de fichiers prenant en charge symlincs. Aucune explication pourquoi cette option ne devrait pas être utilisée.
Danubian Sailor