Rendi XAMPP / Apache servire il file al di fuori di htdocs [chiuso]


304

È possibile configurare xampp per servire un file al di fuori della htdocsdirectory?

Ad esempio, supponiamo di avere un file situato come segue:

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

e i miei file xampp sono normalmente forniti da:

C:\xampp\htdocs\

(perché questa è la configurazione predefinita) Esiste un modo per far riconoscere e servire il mio TransitCalculator.phpfile Apache senza spostarlo in htdocs? Preferibilmente, vorrei che Apache servisse / avesse accesso all'intero contenuto della directory dei progetti, e non voglio spostare la directory dei progetti in htdocs.

modifica: modificato per aggiungere Apache al titolo della domanda per rendere il Q / A più "ricercabile"


1
I tag dovrebbero essere abbastanza ricercabili, credo.
acqua ghiacciata,

24
Questa domanda non avrebbe dovuto essere chiusa. Questa è una domanda XAMPP. Questa è una domanda per gli sviluppatori.
Andrew Koper,

15
Andrew Koper, sono d'accordo, ma a questo punto non sorprende il livello di ostilità ostile endemico in tutta l'ecosfera di scambio di stack. ¯_ (ツ) _ / ¯
cmcculloh

Maby fuori tema, ma voglio solo dare la mancia: alcune volte un'opzione è invece quella di spostare le directory nella cartella "htdocs" ad es. Se vuoi essere in grado di aprire file in Google Drive in localhost;) ( stackoverflow.com/questions/41751330/... )
Gordova

2
Oltre a tutte le risposte, vorrei aggiungerne una. Da PHP 5.4.0 in poi, puoi passare alla radice del tuo progetto usando la riga di comando ed eseguire php -S <host>:<port>. Per esempio php -S localhost:80.
radiantshaw,

Risposte:


362

Ok, per le risposte di pix0r , Sparks 'e Dave sembra che ci siano tre modi per farlo:


Host virtuali

  1. Apri C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Annulla commento ~ riga 19 ( NameVirtualHost *:80).
  3. Aggiungi il tuo host virtuale (~ linea 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. Apri il file hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Inserisci

    127.0.0.1 transitcalculator.localhost #transitCalculator

    fino alla fine del file (prima di Spybot - Cerca e distruggi roba se l'hai installata).

  6. Salva (potrebbe essere necessario salvarlo sul desktop, modificare le autorizzazioni sul vecchio file host (clic destro> proprietà) e copiare quello nuovo nella directory sopra quello vecchio (o rinominare quello vecchio) se si sta utilizzando Vista e hai problemi).
  7. Riavvia Apache.

Ora puoi accedere a quella directory navigando su http: //transitcalculator.localhost/ .


Crea un alias

  1. A partire da ~ linea 200 del tuo http.conffile, copia tutto tra <Directory "C:/xampp/htdocs">e </Directory>(~ linea 232) e incollalo immediatamente sotto con C:/xampp/htdocssostituito con la tua directory desiderata (in questo caso C:/Projects) per dare al tuo server le autorizzazioni corrette per la nuova directory.

  2. Trova la <IfModule alias_module></IfModule>sezione (~ linea 300) e aggiungi

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

    (o qualunque cosa sia rilevante per i tuoi desideri) sotto il Aliasblocco dei commenti, all'interno dei tag del modulo.


Cambia la radice del documento

  1. Modifica ~ linea 176 in C: \ xampp \ apache \ conf \ httpd.conf; cambia DocumentRoot "C:/xampp/htdocs"in #DocumentRoot "C:/Projects"(o qualunque cosa tu voglia).

  2. Modifica ~ linea 203 in modo che corrisponda alla tua nuova posizione (in questo caso C:/Projects).


Appunti:

  • Devi usare le barre "/" invece delle barre "\".
  • Non includere il "/" finale alla fine.
  • riavvia il tuo server .

13
Al passaggio (3) per modificare gli host C: \ Windows \ System32 \ drivers \ etc \. Procedura consigliata per eseguire prima l'editor (Blocco note, Notepad ++ o qualsiasi altro editor) come amministratore. Quindi puoi salvare direttamente nella cartella C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN il

3
Se ricevi 403 errori, fai riferimento a questo link
Wojtek Owczarczyk,

21
Usando Ordine consenti, nega Consenti da tutto su Win7 restituisce ERRORE 403 perché queste opzioni sono obsolete. Usa Richiedi tutto concesso. stackoverflow.com/questions/9110179/...
hywak

4
Cordiali saluti, questo passaggio non mi è sembrato necessario per me fare: Un-comment line 19 (NameVirtualHost *: 80)
Silverback

2
L'uso Order allow,deny Allow from allnon ha funzionato per me, ma ha Require all grantedfunzionato.
Danny Beckett,

96

Puoi riposizionarlo modificando l' impostazione DocumentRoot in XAMPP \ apache \ conf \ httpd.conf.

Attualmente dovrebbe essere:

C: / xampp / htdocs

Modificalo in:

C: / progetti / transitCalculator / trunk


40
Non dimenticare di modificarlo in ENTRAMBE le righe che richiedono DocumentRoot. Se cambi solo quello in alto, otterrai errori di accesso in lettura, ecc.
Arcolye il

2
questo vale anche per Mac XAMP?
kiwi arrabbiato,

ora da quale URL, è possibile accedere alla pagina dell'indice?
Manish Kumar,

49

Un VirtualHost funzionerebbe anche per questo e potrebbe funzionare meglio per te poiché puoi ospitare diversi progetti senza la necessità di sottodirectory. Ecco come lo fai:

httpd.conf (o extra \ httpd-vhosts.conf rispetto a httpd.conf. Le barre rovesciate "\" potrebbero non funzionare):

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> 

File HOSTS (solitamente c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Ora riavvia XAMPP e dovresti essere in grado di accedere a http: //transitcalculator.localhost/ e verrà mappato direttamente a quella directory.

Questo può essere utile se stai cercando di replicare un ambiente di produzione in cui stai sviluppando un sito che siederà sulla radice di un nome di dominio. Ad esempio, è possibile puntare a file con percorsi assoluti che verranno trasferiti al server:

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

mentre in un ambiente che utilizza alias o sottodirectory, dovresti tenere traccia di dove esattamente la directory "images" era relativa al file corrente.


Ho diverse unità di rete sul mio PC che sono state mappate su lettere di unità (ad es X:\myfolder.). Quando utilizzo questo metodo, viene visualizzato un avviso "Accesso vietato". Questo significa che l'utente Apache non ha accesso in lettura all'unità?
harryg

1
In Directorysostituzione Order allow,denye Allow from allcon Require all granted. Vedi stackoverflow.com/questions/9110179/…
Michiel

16

Puoi impostare Apache per pubblicare pagine da qualsiasi luogo con qualsiasi restrizione, ma è normalmente distribuito in una forma più sicura.

La modifica dei file apache (http.conf è uno dei nomi più comuni) ti consentirà di impostare qualsiasi cartella in modo che appaia nella tua webroot.

MODIFICARE:

alias myapp c: \ myapp \

Ho modificato la mia risposta per includere il formato per la creazione di un alias nel file http.conf che è un po 'come un collegamento in Windows o un collegamento simbolico in un * x dove Apache "finge" che una cartella sia nella webroot. Questo probabilmente ti sarà più utile a lungo termine.


10

Se stai cercando di far utilizzare XAMPP come unità di rete come root del documento, devi utilizzare i percorsi UNC in httpd.conf. XAMPP non riconoscerà le unità di rete mappate.

Ad esempio, quanto segue non funzionerà, DocumentRoot "X: / webroot"

Ma questo avverrà, DocumentRoot "//192.168.10.100/webroot" (notare le barre in avanti, non quelle posteriori)


Funziona bene con la mia unità di rete mappata.
Sean Kendle,

7

Soluzione per consentire ad Apache 2 di ospitare siti Web al di fuori di htdocs:

Sotto la direttiva "DocumentRoot" in httpd.conf, dovresti vedere un blocco di directory. Sostituisci questo blocco di directory con:

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

RICORDA DI NON UTILIZZARE QUESTA CONFIGURAZIONE IN UN AMBIENTE REALE


Funziona solo con file system che supportano symlincs. Nessuna spiegazione del perché questa opzione non debba essere utilizzata.
Danubian Sailor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.