Jadikan file XAMPP / Apache melayani di luar htdocs [ditutup]

304

Apakah mungkin mengkonfigurasi xampp untuk menyajikan file di luar htdocsdirektori?

Misalnya, katakan saya memiliki file yang terletak sebagai berikut:

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

dan file xampp saya biasanya dilayani dari:

C:\xampp\htdocs\

(karena itu konfigurasi default) Apakah ada cara untuk membuat Apache mengenali dan melayani TransitCalculator.phpfile saya tanpa memindahkannya htdocs? Lebih disukai saya ingin Apache untuk melayani / memiliki akses ke seluruh isi direktori proyek, dan saya tidak ingin memindahkan direktori proyek di bawah htdocs.

sunting: diedit untuk menambahkan Apache ke judul pertanyaan agar Q / A lebih "dicari"

cmcculloh
sumber
1
Tag seharusnya cukup dicari, saya pikir.
icedwater
24
Pertanyaan ini seharusnya tidak ditutup. Ini adalah pertanyaan XAMPP. Ini adalah pertanyaan pengembang.
Andrew Koper
15
Andrew Koper, saya setuju, tetapi tidak mengherankan dengan tingkat ketidaksopanan bertangan berat yang mewabah di seluruh ekosistem pertukaran-tumpukan pada saat ini. ¯_ (ツ) _ / ¯
cmcculloh
Maby off topic, tetapi hanya ingin memberi tip: Kadang-kadang sebuah opsi adalah memindahkan direktori ke folder "htdocs" misalnya. jika Anda ingin dapat membuka file di Google Drive di localhost;) ( stackoverflow.com/questions/41751330/… )
Gordova
2
Terlepas dari semua jawaban, saya ingin menambahkan satu. Dari PHP 5.4.0 dan seterusnya, Anda dapat pindah ke root proyek Anda menggunakan baris perintah dan jalankan php -S <host>:<port>. Sebagai contoh php -S localhost:80.
radiantshaw

Jawaban:

362

Ok, per jawaban pix0r , Sparks 'dan Dave sepertinya ada tiga cara untuk melakukan ini:


Host Virtual

  1. Buka C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Batalkan komentar ~ baris 19 ( NameVirtualHost *:80).
  3. Tambahkan host virtual Anda (~ baris 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. Buka file host Anda (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Menambahkan

    127.0.0.1 transitcalculator.localhost #transitCalculator

    ke akhir file (sebelum Spybot - Cari & Hancurkan barang jika Anda menginstalnya).

  6. Simpan (Anda mungkin harus menyimpannya di desktop, mengubah izin pada file host lama (klik kanan> properti), dan salin yang baru ke direktori di atas yang lama (atau ganti nama yang lama) jika Anda menggunakan Vista dan mengalami masalah).
  7. Mulai ulang Apache.

Sekarang Anda dapat mengakses direktori itu dengan menjelajahi http: //transitcalculator.localhost/ .


Buat Alias

  1. Mulai ~ baris 200 http.conffile Anda , salin semuanya antara <Directory "C:/xampp/htdocs">dan </Directory>(~ baris 232) dan tempel segera di bawah ini dengan C:/xampp/htdocsdiganti dengan direktori yang Anda inginkan (dalam hal ini C:/Projects) untuk memberikan server Anda izin yang benar untuk direktori baru.

  2. Temukan <IfModule alias_module></IfModule>bagian (~ baris 300) dan tambahkan

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

    (atau apa pun yang relevan dengan keinginan Anda) di bawah Aliasblok komentar, di dalam tag modul.


Ubah root dokumen Anda

  1. Edit ~ line 176 dalam C: \ xampp \ apache \ conf \ httpd.conf; ubah DocumentRoot "C:/xampp/htdocs"ke #DocumentRoot "C:/Projects"(atau apa pun yang Anda inginkan).

  2. Sunting ~ baris 203 untuk mencocokkan lokasi baru Anda (dalam hal ini C:/Projects).


Catatan:

  • Anda harus menggunakan garis miring "/" bukannya garis miring "\".
  • Jangan sertakan trailing "/" di akhir.
  • restart server Anda .
cmcculloh
sumber
13
Pada langkah (3) untuk mengedit host C: \ Windows \ System32 \ drivers \ etc \. Praktik terbaik untuk menjalankan editor (Notepad, Notepad ++ atau editor apa pun) sebagai Administrator terlebih dahulu. Jadi Anda dapat menyimpan langsung ke folder C: \ Windows \ System32 \ drivers \ etc \.
CallMeLaNN
3
Jika Anda mendapatkan 403 kesalahan, lihat tautan ini
Wojtek Owczarczyk
21
Menggunakan Order allow, deny Allow dari semua di Win7 mengembalikan 403 ERROR karena opsi ini sudah usang. Gunakan Wajibkan semua diberikan. stackoverflow.com/questions/9110179/…
hywak
4
Hanya FYI, langkah ini tampaknya tidak perlu saya lakukan: Batalkan komentar pada baris 19 (NameVirtualHost *: 80)
Silverback
2
Menggunakan Order allow,deny Allow from alltidak bekerja untuk saya, tetapi Require all grantedberhasil.
Danny Beckett
96

Anda dapat memindahkannya dengan mengedit pengaturan DocumentRoot di XAMPP \ apache \ conf \ httpd.conf.

Seharusnya saat ini:

C: / xampp / htdocs

Ubah ke:

C: / proyek / transitKalkulator / trunk

Dave Ward
sumber
40
Jangan lupa untuk mengeditnya di KEDUA baris yang meminta DocumentRoot. Jika Anda hanya mengubah satu atas, Anda akan mendapatkan kesalahan baca-akses dll
Arcolye
2
ini berlaku untuk XAMP mac juga?
Kiwi
sekarang dengan URL mana, dapatkah mengakses halaman indeks?
Manish Kumar
49

VirtualHost juga akan berfungsi untuk ini dan dapat bekerja lebih baik untuk Anda karena Anda dapat meng-host beberapa proyek tanpa perlu subdirektori. Begini cara melakukannya:

httpd.conf (atau tambahan \ httpd-vhosts.conf relatif terhadap httpd.conf. Trailing slash "\" mungkin menyebabkannya tidak berfungsi):

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 (biasanya c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Sekarang restart XAMPP dan Anda seharusnya dapat mengakses http: //transitcalculator.localhost/ dan itu akan langsung memetakan ke direktori itu.

Ini dapat membantu jika Anda mencoba mereplikasi lingkungan produksi tempat Anda mengembangkan situs yang terletak di root nama domain. Anda dapat, misalnya, menunjuk ke file dengan jalur absolut yang akan dibawa ke server:

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

sedangkan di lingkungan yang menggunakan alias atau subdirektori, Anda perlu melacak dengan tepat di mana direktori "gambar" relatif terhadap file saat ini.

pix0r
sumber
Saya memiliki beberapa drive jaringan pada PC saya yang telah dipetakan untuk drive huruf (misalnya X:\myfolder). Ketika saya menggunakan metode ini saya mendapat peringatan "Akses Terlarang". Apakah ini berarti pengguna Apache tidak memiliki akses baca ke drive?
harryg
1
Di bawah Directoryganti Order allow,denydan Allow from alldengan Require all granted. Lihat stackoverflow.com/questions/9110179/…
Michiel
16

Anda dapat mengatur Apache untuk melayani halaman dari mana saja dengan batasan apa pun tetapi biasanya didistribusikan dalam bentuk yang lebih aman.

Mengedit file apache Anda (http.conf adalah salah satu nama yang lebih umum) akan memungkinkan Anda untuk mengatur folder apa pun sehingga muncul di webroot Anda.

EDIT:

alias myapp c: \ myapp \

Saya telah mengedit jawaban saya untuk memasukkan format untuk membuat alias dalam file http.conf yang semacam pintas di windows atau symlink di bawah un * x di mana Apache 'berpura-pura' folder berada di webroot. Ini mungkin akan lebih bermanfaat bagi Anda dalam jangka panjang.

percikan
sumber
10

Jika Anda mencoba untuk mendapatkan XAMPP untuk menggunakan drive jaringan sebagai root dokumen Anda, Anda harus menggunakan jalur UNC di httpd.conf. XAMPP tidak akan mengenali drive jaringan yang dipetakan.

Misalnya, hal berikut tidak akan berfungsi, DocumentRoot "X: / webroot"

Tapi ini akan, DocumentRoot "//192.168.10.100/webroot" (perhatikan garis miring ke depan, bukan garis miring kembali)

Jason
sumber
Ini berfungsi baik dengan drive jaringan saya yang dipetakan.
Sean Kendle
7

Solusi untuk mengizinkan Apache 2 meng-host situs web di luar htdocs:

Di bawah arahan "DocumentRoot" di httpd.conf, Anda akan melihat blok direktori. Ganti blok direktori ini dengan:

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

INGAT JANGAN GUNAKAN KONFIGURASI INI DI LINGKUNGAN NYATA

Leandro
sumber
Hanya berfungsi untuk sistem file yang mendukung symlincs. Tidak ada penjelasan mengapa opsi ini tidak boleh digunakan.
Danubian Sailor