ทำ XAMPP / Apache ให้บริการไฟล์นอก htdocs [ปิด]


304

เป็นไปได้หรือไม่ที่จะกำหนดค่าxamppเพื่อให้บริการไฟล์นอกhtdocsไดเรกทอรี?

ตัวอย่างเช่นสมมติว่าฉันมีไฟล์อยู่ดังนี้:

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

และโดยปกติแล้วไฟล์xamppของฉันจะให้บริการจาก:

C:\xampp\htdocs\

(เพราะนั่นคือการกำหนดค่าเริ่มต้น) มีวิธีที่จะทำให้ Apache รู้จักและให้บริการTransitCalculator.phpไฟล์ของฉันโดยไม่ย้ายไปข้างล่างhtdocsหรือไม่? โดยเฉพาะอย่างยิ่งผมอยาก Apache ให้บริการขึ้น / htdocsมีการเข้าถึงเนื้อหาทั้งหมดของไดเรกทอรีโครงการและฉันไม่ต้องการที่จะย้ายไดเรกทอรีโครงการภายใต้

แก้ไข: แก้ไขเพื่อเพิ่ม Apache ในชื่อคำถามเพื่อให้ Q / A เพิ่มเติม "ค้นหา"


1
ฉันคิดว่าแท็กน่าจะค้นหาได้มากพอ
icedwater

24
คำถามนี้ไม่ควรถูกปิด นี่เป็นคำถาม XAMPP นี่คือคำถามของนักพัฒนา
Andrew Koper

15
แอนดรูโคเปอร์ฉันเห็นด้วย แต่มันก็ไม่น่าแปลกใจที่ระดับของโรคที่ไม่เป็นมิตรที่แพร่กระจายอย่างหนักไปทั่วระบบนิเวศของการแลกเปลี่ยนกองซ้อน ณ จุดนี้ ¯_ (ツ) _ / ¯
cmcculloh

ปิด Maby หัวข้อ แต่ต้องการเคล็ดลับ: บางครั้งตัวเลือกคือการย้ายไดเรกทอรีไปยังโฟลเดอร์ "htdocs" แทน หากคุณต้องการที่จะเปิดไฟล์ใน Google Drive ใน localhost;) ( stackoverflow.com/questions/41751330/… )
Gordova

2
นอกเหนือจากคำตอบทั้งหมดฉันต้องการเพิ่ม จาก PHP 5.4.0 php -S <host>:<port>เป็นต้นไปคุณสามารถย้ายไปยังรากโครงการของคุณโดยใช้บรรทัดคำสั่งและดำเนินการ php -S localhost:80เช่น
radiantshaw

คำตอบ:


362

ตกลงต่อคำตอบของpix0r , SparksและDaveดูเหมือนว่ามีสามวิธีในการทำสิ่งนี้:


โฮสต์เสมือน

  1. เปิด C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf
  2. เลิกแสดงความคิดเห็น ~ บรรทัดที่ 19 ( NameVirtualHost *:80)
  3. เพิ่มโฮสต์เสมือนของคุณ (~ บรรทัดที่ 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. เปิดไฟล์โฮสต์ของคุณ (C: \ Windows \ System32 \ drivers \ etc \ hosts)

  5. เพิ่ม

    127.0.0.1 transitcalculator.localhost #transitCalculator

    ที่ส่วนท้ายของไฟล์ (ก่อน Spybot - ค้นหาและทำลายสิ่งที่คุณติดตั้งไว้)

  6. บันทึก (คุณอาจต้องบันทึกลงบนเดสก์ท็อปเปลี่ยนสิทธิ์ของไฟล์โฮสต์เก่า (คลิกขวา> คุณสมบัติ) และคัดลอกไฟล์ใหม่ไปยังไดเรกทอรีเหนือไฟล์เก่า (หรือเปลี่ยนชื่อเก่า) หากคุณใช้ Vista และมีปัญหา)
  7. รีสตาร์ท Apache

ตอนนี้คุณสามารถเข้าถึงไดเรกทอรีที่โดยไปที่http: //transitcalculator.localhost/


ทำนามแฝง

  1. เริ่มต้น ~ บรรทัด 200 ของhttp.confไฟล์คัดลอกทุกอย่างระหว่าง<Directory "C:/xampp/htdocs">และ</Directory>(~ บรรทัด 232) แล้ววางลงด้านล่างทันทีC:/xampp/htdocsแทนที่ด้วยไดเรกทอรีที่คุณต้องการ (ในกรณีนี้C:/Projects) เพื่อให้เซิร์ฟเวอร์ของคุณมีสิทธิ์ที่ถูกต้องสำหรับไดเรกทอรีใหม่

  2. ค้นหา<IfModule alias_module></IfModule>ส่วน (~ บรรทัด 300) และเพิ่ม

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

    (หรือสิ่งที่เกี่ยวข้องกับความต้องการของคุณ) ด้านล่างAliasบล็อกความคิดเห็นภายในแท็กโมดูล


เปลี่ยนรูทเอกสารของคุณ

  1. แก้ไข ~ บรรทัดที่ 176 ใน C: \ xampp \ apache \ conf \ httpd.conf; เปลี่ยนDocumentRoot "C:/xampp/htdocs"เป็น#DocumentRoot "C:/Projects"(หรืออะไรก็ได้ที่คุณต้องการ)

  2. แก้ไข ~ บรรทัด 203 เพื่อให้ตรงกับตำแหน่งใหม่ของคุณ (ในกรณีนี้C:/Projects)


หมายเหตุ:

  • คุณต้องใช้เครื่องหมายทับซ้าย "/" แทนเครื่องหมายแบ็กสแลช "\"
  • อย่ารวมส่วนท้าย "/" ที่ท้าย
  • เริ่มต้นเซิร์ฟเวอร์ของคุณ

13
ในขั้นตอน (3) เพื่อแก้ไข C: \ Windows \ System32 \ drivers \ etc \ hosts วิธีที่ดีที่สุดในการเรียกใช้โปรแกรมแก้ไข (Notepad, Notepad ++ หรือเครื่องมือแก้ไขใด ๆ ) ในฐานะผู้ดูแลระบบก่อน ดังนั้นคุณสามารถบันทึกโดยตรงไปยังโฟลเดอร์ C: \ Windows \ System32 \ drivers \ etc \
CallMeLaNN

3
หากคุณได้รับข้อผิดพลาด 403 อ้างถึงลิงค์นี้
Wojtek Owczarczyk

21
การใช้คำสั่งอนุญาตให้ปฏิเสธการอนุญาตจากทั้งหมดบน Win7 ส่งคืนข้อผิดพลาด 403 เนื่องจากตัวเลือกนี้ถูกคัดค้าน ใช้ต้องได้รับอนุญาตทั้งหมด stackoverflow.com/questions/9110179/…
hywak

4
เพียงแค่ FYI ขั้นตอนนี้ไม่จำเป็นสำหรับฉันที่จะทำ: Un-comment line 19 (NameVirtualHost *: 80)
Silverback

2
การใช้Order allow,deny Allow from allไม่ได้ผลสำหรับฉัน แต่Require all grantedได้ผล
Danny Beckett

96

คุณสามารถเปลี่ยนตำแหน่งได้โดยแก้ไขการตั้งค่าDocumentRootใน XAMPP \ apache \ conf \ httpd.conf

มันควรจะเป็น:

C: / XAMPP / htdocs

เปลี่ยนเป็น:

C: / โครงการ / transitCalculator / ลำ


40
อย่าลืมแก้ไขในทั้งสองบรรทัดที่ขอ DocumentRoot หากคุณเปลี่ยนเฉพาะอันดับต้น ๆ คุณจะได้รับข้อผิดพลาดการเข้าถึงเพื่ออ่านเป็นต้น
Arcolye

2
ใช้กับ XAMP mac ได้หรือไม่?
กีวีโกรธ

ตอนนี้ URL ใดสามารถเข้าถึงหน้าดัชนีได้หรือไม่
Manish Kumar

49

VirtualHost ยังสามารถใช้งานได้และอาจทำงานได้ดีขึ้นสำหรับคุณเนื่องจากคุณสามารถโฮสต์หลายโครงการโดยไม่จำเป็นต้องใช้ไดเรกทอรีย่อย นี่คือวิธีที่คุณทำ:

httpd.conf (หรือพิเศษ \ httpd-vhosts.conf ที่เกี่ยวข้องกับ httpd.conf เครื่องหมายทับ "" อาจทำให้ไม่ทำงาน):

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> 

ไฟล์โฮสต์ (โดยปกติ c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

ตอนนี้รีสตาร์ท XAMPP และคุณควรจะสามารถเข้าถึงhttp: //transitcalculator.localhost/และมันจะแมปตรงไปยังไดเรกทอรีนั้น

สิ่งนี้มีประโยชน์หากคุณพยายามจำลองสภาพแวดล้อมการผลิตที่คุณกำลังพัฒนาเว็บไซต์ที่จะอยู่บนรูทของชื่อโดเมน ตัวอย่างเช่นคุณสามารถชี้ไปที่ไฟล์ที่มีพา ธ สัมบูรณ์ที่จะพาไปยังเซิร์ฟเวอร์:

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

ในขณะที่อยู่ในสภาพแวดล้อมที่ใช้นามแฝงหรือไดเรกทอรีย่อยคุณจะต้องติดตามว่าไดเรกทอรี "images" นั้นสัมพันธ์กับไฟล์ปัจจุบันอย่างไร


ฉันมีไดรฟ์เครือข่ายหลายตัวบนพีซีของฉันซึ่งถูกแมปกับตัวอักษรไดรฟ์ (เช่นX:\myfolder) เมื่อฉันใช้วิธีนี้ฉันจะได้รับคำเตือน "การห้ามเข้า" นี่หมายความว่าผู้ใช้ Apache ไม่มีการเข้าถึงไดรฟ์แบบอ่านหรือไม่?
harryg

1
ภายใต้Directoryแทนที่Order allow,denyและมีAllow from all Require all grantedดูstackoverflow.com/questions/9110179/…
Michiel

16

คุณสามารถตั้งค่า Apache ให้บริการหน้าจากที่ใดก็ได้โดยมีข้อ จำกัด แต่โดยทั่วไปจะกระจายในรูปแบบที่ปลอดภัยยิ่งขึ้น

การแก้ไขไฟล์ apache ของคุณ (http.conf เป็นหนึ่งในชื่อทั่วไป) จะช่วยให้คุณตั้งค่าโฟลเดอร์ใด ๆ เพื่อให้ปรากฏใน webroot ของคุณ

แก้ไข:

นามแฝง myapp c: \ myapp \

ฉันได้แก้ไขคำตอบของฉันเพื่อรวมรูปแบบสำหรับการสร้างนามแฝงในไฟล์ http.conf ซึ่งคล้ายกับทางลัดในหน้าต่างหรือ symlink ภายใต้ un * x ที่ Apache 'แกล้ง' โฟลเดอร์อยู่ใน webroot นี่อาจเป็นประโยชน์กับคุณในระยะยาว


10

หากคุณพยายามให้ XAMPP ใช้ไดรฟ์เครือข่ายเป็นรูทเอกสารของคุณคุณต้องใช้เส้นทาง UNC ใน httpd.conf XAMPP จะไม่รู้จักไดรฟ์เครือข่ายที่แมปของคุณ

ตัวอย่างต่อไปนี้ใช้ไม่ได้ DocumentRoot "X: / webroot"

แต่สิ่งนี้จะเป็น DocumentRoot "//192.168.10.100/webroot" (สังเกตเครื่องหมายทับซ้ายไม่ใช่แบ็กสแลช)


มันทำงานได้ดีกับไดรฟ์เครือข่ายที่แมปของฉัน
Sean Kendle

7

โซลูชันเพื่อให้ Apache 2 โฮสต์เว็บไซต์นอก htdocs:

ภายใต้คำสั่ง "DocumentRoot" ใน httpd.conf คุณควรเห็นบล็อกไดเรกทอรี แทนที่บล็อกไดเรกทอรีนี้ด้วย:

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

จำไว้ว่าอย่าใช้การกำหนดค่านี้ในสภาพแวดล้อมที่แท้จริง


ใช้งานได้เฉพาะกับระบบไฟล์ที่รองรับ symlincs ไม่มีคำอธิบายว่าทำไมจึงไม่ควรใช้ตัวเลือกนี้
Danubian Sailor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.