Spraw, aby XAMPP / Apache wyświetlał plik poza htdocs [zamknięte]

304

Czy można skonfigurować xampp, aby wyświetlał plik poza htdocskatalogiem?

Powiedzmy na przykład, że mam plik zlokalizowany w następujący sposób:

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

a moje pliki xampp są zwykle dostarczane z:

C:\xampp\htdocs\

(ponieważ taka jest konfiguracja domyślna) Czy istnieje sposób, aby Apache rozpoznał i podał mój TransitCalculator.phpplik bez przenoszenia go htdocs? Wolałbym, żeby Apache obsługiwał / miał dostęp do całej zawartości katalogu projektów i nie chcę przenosić katalogu projektów htdocs.

edit: edytowane w celu dodania Apache do tytułu pytania, aby Q / A była bardziej „przeszukiwalna”

cmcculloh
źródło
1
Sądzę, że tagi powinny być wystarczająco przeszukiwalne.
icedwater
24
To pytanie nie powinno być zamknięte. To jest pytanie XAMPP. To jest pytanie programisty.
Andrew Koper,
15
Andrew Koper, zgadzam się, ale nie jest zaskakujące, że poziom ciężkiej ręki nie jest przyjazny w tej chwili w całej ekosferze wymiany stosów. ¯_ (ツ) _ / ¯
cmcculloh
Może odejdź od tematu, ale po prostu chcę podpowiedzieć: Czasami zamiast tego możesz przenieść katalogi do folderu „htdocs”, np. jeśli chcesz móc otwierać pliki na Dysku Google w localhost;) ( stackoverflow.com/questions/41751330/... )
Gordova
2
Oprócz wszystkich odpowiedzi chciałbym dodać jedną. Począwszy od PHP 5.4.0, możesz przejść do katalogu głównego projektu za pomocą wiersza poleceń i wykonać php -S <host>:<port>. Na przykład php -S localhost:80.
radiantshaw

Odpowiedzi:

362

Ok, na odpowiedzi pix0r , Sparks i Dave'a wygląda na to, że są na to trzy sposoby:


Wirtualne hosty

  1. Otwórz C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Cofnij komentarz ~ wiersz 19 ( NameVirtualHost *:80).
  3. Dodaj swojego wirtualnego hosta (~ linia 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. Otwórz plik hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Dodaj

    127.0.0.1 transitcalculator.localhost #transitCalculator

    na końcu pliku (przed Spybot - Search & Destroy rzeczy, jeśli masz zainstalowany).

  6. Zapisz (może być konieczne zapisanie go na pulpicie, zmiana uprawnień do starego pliku hosts (prawy przycisk myszy> właściwości) i skopiowanie nowego do katalogu na stary (lub zmiana nazwy starego), jeśli używasz Vista i kłopoty).
  7. Uruchom ponownie Apache.

Teraz możesz uzyskać dostęp do tego katalogu, przechodząc do http: //transitcalculator.localhost/ .


Utwórz alias

  1. Począwszy od ~ 200 wiersza http.confpliku, skopiuj wszystko pomiędzy <Directory "C:/xampp/htdocs">i </Directory>(~ wiersz 232) i wklej go bezpośrednio poniżej, C:/xampp/htdocszastępując go wybranym katalogiem (w tym przypadku C:/Projects), aby dać serwerowi odpowiednie uprawnienia do nowego katalogu.

  2. Znajdź <IfModule alias_module></IfModule>sekcję (~ linia 300) i dodaj

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

    (lub cokolwiek, co odpowiada Twoim pragnieniom) poniżej Aliasbloku komentarza, wewnątrz tagów modułu.


Zmień katalog główny dokumentu

  1. Edytuj ~ wiersz 176 w C: \ xampp \ apache \ conf \ httpd.conf; zmień DocumentRoot "C:/xampp/htdocs"na #DocumentRoot "C:/Projects"(lub cokolwiek chcesz).

  2. Edytuj ~ wiersz 203, aby dopasować nową lokalizację (w tym przypadku C:/Projects).


Uwagi:

  • Musisz użyć ukośników „/” zamiast ukośników „\”.
  • Nie dołączaj końcowego „/” na końcu.
  • zrestartuj serwer .
cmcculloh
źródło
13
W kroku (3) dokonaj edycji C: \ Windows \ System32 \ drivers \ etc \ hosts. Najlepsza praktyka, aby najpierw uruchomić edytor (Notepad, Notepad ++ lub dowolny edytor) jako Administrator. Możesz więc zapisać bezpośrednio w folderze C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN
3
Jeśli pojawi się błąd 403, zapoznaj się z tym linkiem
Wojtek Owczarczyk
21
Za pomocą polecenia Zezwalaj, odmawiaj Zezwól wszystkim na Win7 zwraca błąd 403 BŁĄD, ponieważ te opcje są przestarzałe. Użyj Wymagaj wszystkich przyznanych. stackoverflow.com/questions/9110179/…
hywak
4
Po prostu FYI, ten krok nie wydawał mi się konieczny do zrobienia: Cofnij komentarz w linii 19 (NameVirtualHost *: 80)
Silverback
2
Korzystanie Order allow,deny Allow from allnie działało dla mnie, ale Require all granteddziałało.
Danny Beckett
96

Możesz go przenieść, edytując ustawienie DocumentRoot w XAMPP \ apache \ conf \ httpd.conf.

Obecnie powinno to być:

C: / xampp / htdocs

Zmień na:

C: / projects / transitCalculator / trunk

Dave Ward
źródło
40
Nie zapomnij edytować go OBU liniami, które proszą o DocumentRoot. Jeśli zmienisz tylko najwyższy, dostaniesz błędy dostępu do odczytu itp.
Arcolye
2
dotyczy to również XAMP mac?
zły kiwi
pod jakim adresem URL można uzyskać dostęp do strony indeksu?
Manish Kumar
49

VirtualHost również by na to działał i może działać lepiej dla ciebie, ponieważ możesz obsługiwać kilka projektów bez potrzeby podkatalogów. Oto jak to zrobić:

httpd.conf (lub dodatkowy \ httpd-vhosts.conf w stosunku do httpd.conf. Końcowe ukośniki „\” mogą spowodować, że nie będzie działać):

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> 

Plik HOSTS (zwykle c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Teraz zrestartuj XAMPP i powinieneś być w stanie uzyskać dostęp do http: //transitcalculator.localhost/, a zostanie on zmapowany bezpośrednio do tego katalogu.

Może to być pomocne, jeśli próbujesz replikować środowisko produkcyjne, w którym tworzysz witrynę, która będzie znajdować się w katalogu głównym nazwy domeny. Możesz na przykład wskazać pliki z bezwzględnymi ścieżkami, które zostaną przeniesione na serwer:

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

podczas gdy w środowisku używającym aliasów lub podkatalogów musisz dokładnie śledzić, gdzie katalog „images” był względny w stosunku do bieżącego pliku.

pix0r
źródło
Na komputerze mam kilka dysków sieciowych, które zostały zamapowane na litery dysków (np X:\myfolder.). Kiedy korzystam z tej metody, pojawia się ostrzeżenie „Dostęp zabroniony”. Czy to oznacza, że ​​użytkownik Apache nie ma dostępu do odczytu dysku?
harryg
1
Pod Directoryzastąp Order allow,denyi Allow from allz Require all granted. Zobacz stackoverflow.com/questions/9110179/…
Michiel
16

Możesz ustawić Apache do wyświetlania stron z dowolnego miejsca z dowolnymi ograniczeniami, ale zwykle jest on dystrybuowany w bezpieczniejszej formie.

Edycja plików apache (http.conf jest jedną z bardziej popularnych nazw) pozwoli ci ustawić dowolny folder tak, aby pojawił się w twoim katalogu głównym.

EDYTOWAĆ:

alias myapp c: \ myapp \

Zredagowałem swoją odpowiedź, aby uwzględnić format tworzenia aliasu w pliku http.conf, który jest jak skrót w systemie Windows lub dowiązanie symboliczne pod un * x, gdzie Apache „udaje”, że folder znajduje się w katalogu głównym. Będzie to prawdopodobnie bardziej przydatne dla ciebie w dłuższej perspektywie.

iskrzy
źródło
10

Jeśli próbujesz przekonać XAMPP do używania dysku sieciowego jako katalogu głównego dokumentu, musisz użyć ścieżek UNC w httpd.conf. XAMPP nie rozpozna mapowanych dysków sieciowych.

Na przykład następujące nie będzie działać, DocumentRoot „X: / webroot”

Ale tak się stanie, DocumentRoot „//192.168.10.100/webroot” (zwróć uwagę na ukośniki do przodu, a nie do tyłu)

Jason
źródło
Działa dobrze z moim zmapowanym dyskiem sieciowym.
Sean Kendle
7

Rozwiązanie pozwalające Apache 2 na hostowanie stron internetowych poza htdocs:

Pod dyrektywą „DocumentRoot” w httpd.conf powinieneś zobaczyć blok katalogu. Zamień ten blok katalogu na:

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

PAMIĘTAJ, ABY NIE UŻYWAĆ TEJ KONFIGURACJI W PRAWDZIWYM ŚRODOWISKU

Leandro
źródło
Działa tylko w systemach plików obsługujących symlinki. Brak wyjaśnienia, dlaczego nie należy używać tej opcji.
Danubian Sailor