ฉันจะเปลี่ยนไดเรกทอรีรูทของเซิร์ฟเวอร์ apache ได้อย่างไร [ปิด]


241

ไม่มีใครรู้วิธีเปลี่ยนรูทเอกสารของเซิร์ฟเวอร์ Apache หรือไม่ ฉันเป็นพื้นต้องการlocalhostจะมาจากไดเรกทอรีแทน/users/spencer/projects/var/www

แก้ไข

ฉันคิดว่ามันจบลงแล้ว บางคนแนะนำให้ฉันเปลี่ยนhttpd.confไฟล์ แต่ฉันพบการค้นหาไฟล์ใน/etc/apache2/sites-available/defaultและเปลี่ยนไดเรกทอรีรากจาก/var/wwwเป็น/home/myusername/projects_folderและใช้งานได้


Stack Overflow เป็นเว็บไซต์สำหรับคำถามเกี่ยวกับการเขียนโปรแกรมและการพัฒนา คำถามนี้ดูเหมือนจะไม่ได้อยู่ที่หัวข้อเพราะมันไม่เกี่ยวกับการเขียนโปรแกรมหรือการพัฒนา ดูหัวข้อใดบ้างที่ฉันสามารถถามเกี่ยวกับที่นี่ในศูนย์ช่วยเหลือ บางทีความผิดพลาดของเซิร์ฟเวอร์หรือการแลกเปลี่ยนผู้ดูแลเว็บสแต็คอาจเป็นเรื่องที่ควรถาม
jww

คำตอบ:


209

คุณต้องเปลี่ยนการDocumentRootตั้งค่าในhttpd.confไฟล์ของคุณ โอกาสที่มันจะอยู่ภายใต้สิ่งที่ชอบ/etc/apache2/conf/httpd.conf

ใช้ตัวแก้ไขที่คุณชื่นชอบ (ผมขอแนะนำเป็นกลุ่ม ) และมองหาและเปลี่ยนเป็นDocumentRoot /users/spencer/projectsดูการตั้งค่าที่มีลักษณะดังนี้:

<Directory "/var/www">

คุณจะต้องเปลี่ยนสิ่งที่อยู่ในเครื่องหมายคำพูดในไดเรกทอรีใหม่ของคุณ นี่ให้สิทธิ์การเข้าถึง Apache เพื่ออ่านจากไดเรกทอรีนั้นเมื่อผู้ใช้ทำการร้องขอที่เรียกมัน

ตอนนี้เริ่มบริการ Apache ของคุณ ( httpd -k restart) และคุณควรจะไป

แก้ไข : โดยปกติแล้วไฟล์กำหนดค่าของไซต์ Apache2 จะอยู่ใน/etc/apache2/sites-available/ (Debian, Ubuntu, ฯลฯ )


6
ฉันเปิด /etc/apache2/httpd.conf แต่ไฟล์ว่างเปล่า ฉันเปิดมันด้วย gedit
Spencer Cooley

3
ไฟล์อาจอยู่ใน /etc/httpd/conf/httpd.conf ทั้งนี้ขึ้นอยู่กับรสชาติของ Linux
Chris Henry

3
ไฟล์ httpd.conf ว่างเปล่า แต่ฉันพบไฟล์ที่ etc / apache2 / sites-available / default และเปลี่ยนไดเรกทอรีรูทที่นั่น ฉันน่าจะถามว่ามันไม่ได้อยู่บนเซิร์ฟเวอร์จริง ฉันกำลังตั้งค่าสภาพแวดล้อมการพัฒนาท้องถิ่น ไม่แน่ใจว่าจะสร้างความแตกต่างได้หรือไม่
Spencer Cooley

3
เป็นไปได้ไหมที่จะเปิดใช้งานทั้ง / var / www และ / home / myusername / projects_folder ในเวลาเดียวกัน? และฉันควรกำหนดค่าอย่างไร ขอบคุณ
พอลโล

3
"คำตอบ" ล้าสมัยจริงๆ คำตอบที่ถูกต้องตามเอกสารของ Ubuntu 18.x คือเปลี่ยนไดเรกทอรีรากของ Apache หรือย้ายโครงการไปที่ / var / www / html ในการเปลี่ยนไดเรกทอรีรากของ Apache ให้รัน: cd / etc / apache2 / sites-available จากนั้นเปิดไฟล์ 000-default.conf โดยใช้คำสั่ง: nano 000-default.conf แก้ไขตัวเลือก DocumentRoot: DocumentRoot / path / to / my / project (ดูaskubuntu.com/questions/337874/… )
sea26.2

263

โปรดทราบว่าสิ่งนี้ใช้ได้กับ Ubuntu 14.04 LTS และรุ่นที่ใหม่กว่าเท่านั้น

ใน Ubuntu 14.04 LTS /var/www/htmlของฉันรากเอกสารที่ถูกกำหนดให้ มันถูกกำหนดค่าในไฟล์ต่อไปนี้:

/etc/apache2/sites-available/000-default.conf

ดังนั้นเพียงแค่ทำ

sudo nano /etc/apache2/sites-available/000-default.conf

และเปลี่ยนบรรทัดต่อไปนี้เป็นสิ่งที่คุณต้องการ:

DocumentRoot /var/www/html

ยังทำ

sudo nano /etc/apache2/apache2.conf

และค้นหาสิ่งนี้

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

และการเปลี่ยนแปลง /var/www/htmlเป็นไดเรกทอรีที่คุณต้องการ

และบันทึก

หลังจากที่คุณบันทึกการเปลี่ยนแปลงของคุณเพียงรีสตาร์ท apache2 เว็บเซิร์ฟเวอร์และคุณจะทำ :)

sudo service apache2 restart


ถ้าคุณต้องการแก้ไขข้อความกราฟิกคุณก็สามารถแทนที่ด้วยsudo nanogksu gedit


1
@Paul Lo: ฉันไม่ได้ลองใน Ubuntu 13.10, เฉพาะใน Ubuntu 14.04; เนื่องจากฉันค่อนข้างแน่ใจว่าครั้งแรกที่ฉันตั้งค่า apache (ซึ่งอยู่ใน Ubuntu 12.04) จึงไม่มีไดเรกทอรีดังกล่าว ใช่ฉันเดาว่านี่มีเฉพาะใน Ubuntu 14.04 LTS และใหม่กว่าเท่านั้น อย่างไรก็ตามคุณสามารถดูคำตอบอื่น ๆ upvotes แนะนำว่าพวกเขาช่วยคนอื่นบางทีพวกเขาอาจทำงานกับ Ubuntu 13.10
mozzbozz

1
อย่างไรก็ตามขอขอบคุณสำหรับผมเพิ่งแก้ไขข้อมูลนี้ไปคำตอบจึงไม่มีใครที่อื่นเดินเข้าไปในกับดักของความพยายามนี้กับรุ่นเก่าอูบุนตู (y)
mozzbozz

3
@mozzbozzm คุณพูดถูก เพียง 14.04 เป็นตัวเลือกที่แปลกจริง ๆ ตอนนี้ก็มีvar/www/htmlรูตเริ่มต้น พวกเขาพยายามที่จะเสียเวลาจริง ๆหรือไม่? :)
davidkonrad

4
ฉันได้รับข้อผิดพลาดต้องห้ามYou don't have permission to access / on this server.เมื่อฉันกด Localhost: 80 ในเบราว์เซอร์ของฉัน ฉันจำเป็นต้องเปลี่ยนพอร์ตหรือไม่
Costa

3
@Costa ฉันแก้ไขปัญหาโดยเพิ่ม<Directory path_to_directory> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ใน /etc/apache2/apache2.conf
Keenan Gebze

42

/etc/apache2/sites-available/defaultผมต้องแก้ไข บรรทัดเหมือนกันกับที่กล่าวถึงโดย RDL


3
การแก้ไขที่แนะนำโดย @pabloab ต้องบอกว่า: "Apache 2.4 และสูงกว่านั้นต้องใช้.confในตอนท้ายและโดยค่าเริ่มต้นจะมี000-คำนำหน้าว่า" /etc/apache2/sites-available/000-default.confผลที่ได้คือ ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่มันอาจช่วยคนได้บ้าง
Nick

^^ สิ่งนี้แก้ไขได้ มันอยู่ที่ไหนเอกสารที่ฉันต้องการ. conf ที่ส่วนท้ายของไฟล์ที่มีเว็บไซต์ของฉัน?!? ฉันมีโฮสต์เสมือนประมาณ 20 โฮสต์ที่ถูกปิดใช้งานและออฟไลน์หลังจากการอัปเดตและหลังจากสองสามชั่วโมงฉันจะค้นหาและเปลี่ยนชื่อไฟล์ที่มีอยู่ในไซต์ของฉันให้ฉัน
James Perih

23

นี่สำหรับอูบุนตู 14.04:

ในไฟล์/etc/apache2/apache2.confมันควรจะเป็นด้านล่างโดยไม่มีชื่อไดเรกทอรี:

<Directory /home/username>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

และในไฟล์/etc/apache2/sites-available/000-default.confคุณควรรวมชื่อไดเรกทอรีที่กำหนดเองเช่น www:

DocumentRoot /home/username/www

หากไม่เหมือนด้านบนมันจะทำให้คุณเกิดข้อผิดพลาดเมื่อโหลดเซิร์ฟเวอร์: Forbidden You don't have permission to access / on this server


ขอบคุณเพื่อน :) สิ่งนี้ใช้ได้กับฉันใน Ubuntu 16.04
Magesh Kumaar

2
นอกจากนี้ยังทำงานกับ Debian 8
androsfat

15

วิธีที่เหมาะสมในการเปลี่ยนไดเรกทอรีหรือเรียกใช้จากหลายไดเรกทอรีภายใต้พอร์ตที่แตกต่างกันสำหรับ apache2 มีดังนี้:

สำหรับ apache2 ไฟล์การกำหนดค่าจะอยู่ภายใต้/etc/apache2และไม่ใช้ไฟล์การกำหนดค่าเดียวเช่นเดียวกับในเวอร์ชันที่เก่ากว่า แต่ถูกแบ่งออกเป็นไฟล์การกำหนดค่าที่มีขนาดเล็กลงโดยเป็นไฟล์/etc/apache2/apache2.confการกำหนดค่าหลัก เพื่อให้บริการไฟล์จากไดเรกทอรีอื่นเราจำเป็นต้องใช้ไฟล์ virtualhost conf ใหม่ ไฟล์ conf virtualhost อยู่ใน/etc/apache2/sites-available(ห้ามแก้ไขไฟล์ภายในเว็บไซต์ที่เปิดใช้งาน) การติดตั้ง apache เริ่มต้นใช้ไฟล์ conf virtualhost000-default.confใช้แฟ้ม

เริ่มต้นด้วยการสร้างไฟล์ virtualhost ใหม่โดยการคัดลอกไฟล์ virtualhost เริ่มต้นที่ใช้โดยการติดตั้งเริ่มต้นของ apache (ไฟล์ที่ทำงานที่ localhost บนพอร์ต 80) เปลี่ยนเป็นไดเรกทอรี/etc/apache2/sites-availableแล้วทำการคัดลอกโดยsudo cp 000-default.conf example.com.confตอนนี้แก้ไขไฟล์โดยsudo gedit example.com.confเป็น:

<VirtualHost *:80>
    ServerAdmin example@localhost
    DocumentRoot /home/ubuntu/example.com    
</VirtualHost>

ฉันได้ลบบรรทัดที่ไม่สำคัญออกจากไฟล์ด้านบนเพื่อความกระชับ นี่คือเส้นทางไปยังไดเรกทอรีที่ไฟล์เว็บไซต์ที่มีที่จะให้บริการเช่นDocumentRootindex.html

สร้างไดเรกทอรีที่คุณต้องการให้บริการไฟล์เช่น; mkdir example.comและเจ้าของการเปลี่ยนแปลงและกลุ่มเริ่มต้นของไดเรกทอรีสำหรับเช่นถ้าเข้าสู่ระบบในชื่อผู้ใช้สิทธิ์การเปลี่ยนแปลงเป็นubuntu sudo chown ubuntu:www-data example.comนี้ถือเป็นการเข้าถึงเต็มรูปแบบให้กับผู้ใช้และช่วยให้การอ่านและการดำเนินการเข้าถึงกลุ่มubuntuwww-data

ตอนนี้แก้ไขไฟล์ apache conf /etc/apache2/apache2.confโดยการออกคำสั่งsudo gedit apache2.confและค้นหาบรรทัด<Directory /var/www/>และด้านล่างแท็กปิด</Directory>เพิ่มต่อไปนี้ด้านล่าง:

<Directory /home/ubuntu/example.com>
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

ขณะนี้มีสองคำสั่งเพื่อเปิดใช้งานหรือปิดใช้งานไฟล์กำหนดค่า virtualhost ซึ่งเป็นa2ensiteและa2dissiteตามลำดับ ตอนนี้เนื่องจากexample.com.confไฟล์ของเราใช้พอร์ตเดียวกัน ( 80) ตามที่ใช้โดยไฟล์กำหนดค่าเริ่มต้น ( 000-default.conf) เราจึงต้องปิดการใช้งานไฟล์กำหนดค่าเริ่มต้นด้วยการออกคำสั่งsudo a2dissite 000-default.confและเปิดใช้งานไฟล์ virtualhost conf ของเราโดยsudo a2ensite example.com.conf

sudo service apache2 restartตอนนี้เริ่มต้นใหม่หรือโหลดเซิร์ฟเวอร์ที่มีคำสั่ง ตอนนี้ apache ให้บริการไฟล์จากไดเรกทอรีexample.comที่localhostพอร์ตเริ่มต้นของ80พอร์ตเริ่มต้นของ

a2ensiteคำสั่งพื้นสร้างการเชื่อมโยงสัญลักษณ์ไปยังแฟ้ม conf ภายใต้ไดเรกทอรีเว็บไซต์ที่เปิดใช้งาน

ห้ามแก้ไขไฟล์ภายใน directoy ที่เปิดใช้งานไซต์ (หรือเปิดใช้งาน *) ตามที่ระบุไว้ในคำตอบนี้https://stackoverflow.com/a/41568701/2532763

ในการเปลี่ยนพอร์ตและเรียกใช้จากหลายไดเรกทอรีในพอร์ตต่าง ๆ :

ตอนนี้ถ้าคุณต้องการรันไดเร็กทอรีบนพอร์ตอื่นให้เปลี่ยนหมายเลขพอร์ตจาก 80 เป็น 8080 โดยแก้ไขไฟล์ virtualhost เป็น:

<VirtualHost *:8080>
    ServerAdmin user@localhost
    DocumentRoot /home/ubuntu/work
</VirtualHost>

และแก้ไข/etc/apache2/ports.confและเพิ่มListen 8080ด้านล่างบรรทัดListen 80

ตอนนี้เราสามารถเปิดใช้งานไฟล์ conf virtualhost เริ่มต้นที่ทำงานบนพอร์ต 80 เนื่องจากไดเรกทอรี example.com ใช้พอร์ต 8080 เป็น sudo a2ensite 000-default.conf

sudo service apache2 restartตอนนี้เริ่มต้นใหม่หรือโหลดเซิร์ฟเวอร์ที่มีคำสั่ง ตอนนี้ทั้งสองไดเรกทอรีสามารถเข้าถึงได้จากlocalhostและlocalhost:8080


4

ฉันทำงานกับ LAMP และเพื่อเปลี่ยนโฟลเดอร์ Root Documentฉันได้แก้ไขไฟล์เริ่มต้นซึ่งมีอยู่ใน โฟลเดอร์/ etc / apache2 / sites-available หากคุณต้องการแก้ไขให้ทำดังนี้

DocumentRoot /home/username/new_root_folder
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/username/new_root_folder>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

หลังจากนี้ถ้าคุณพิมพ์ localhost ในเบราว์เซอร์มันจะโหลด* / home / ชื่อผู้ใช้ / new_root_folder *เนื้อหา


4

หากคุณหาไม่เจอ http.confและทำตามวิธีของนิค

รีสตาร์ท Apache โดยใช้ sudo service apache2 restart


4

สำหรับapache2บนLinux Mint 17.3 Cinnamon 64-bit งานต่อไปนี้:

  1. ในการ/etc/apache2/sites-available/เปิด000-default.confไฟล์และเปลี่ยนDocument Rootเป็นพา ธ สัมบูรณ์ของไดเร็กทอรีของคุณ

    sudo vim /etc/apache2/sites-available/000-default.conf

  2. ใน/etc/apache2/การเปิดhttpd.confและเพิ่มแท็กอ้างอิงไดเรกทอรีของคุณและมีการตั้งค่าเดียวกันกับแท็กสำหรับ<Directory>var/www

    sudo vim /etc/apache2/apache2.conf

    บนเครื่องของฉันมันดูเหมือนว่านี้:


<Directory /home/my_user_name/php/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

หมายเหตุ:ในขั้นตอนแรกคุณอาจต้องการเปลี่ยนรูทเอกสารในdefault-ssl.confไฟล์เช่นเดียวกับจุดประสงค์ SSL แต่เท่าที่ฉันสามารถบอกได้ว่าไม่จำเป็นต้องใช้สภาพแวดล้อมการพัฒนาทั่วไป


2

ใน apache เวอร์ชั่น 2.4.18 (Ubuntu)

1. ไปที่ไฟล์นี้ /etc/apache2/apache2.conf ค้นหา<Directory /var/www/>และแทนที่ไปยังไดเรกทอรีของคุณ ......

2. ไปที่ /etc/apache2/sites-available/000-default.conf ค้นหาDocumentRoot /var/www/htmlและแทนที่ DocumentRoot ของคุณ ....


ฉันได้ทำทั้งสองอย่างแล้ว มันยังคงแสดงสิ่งต้องห้ามคุณไม่ได้รับอนุญาตให้เข้าถึง / บนเซิร์ฟเวอร์นี้
โปรแกรมเมอร์

ตรวจสอบสิทธิ์ในโฟลเดอร์ของคุณหากไม่ได้อยู่ในไดเรกทอรีบ้านของคุณ
habibun

2

ในกรณีที่คุณใช้ Ubuntu 16.04 โปรดอัปเดต 000-default.conf ในไดเรกทอรี / etc / apache2 / sites-available

ที่นี่ -> ServerAdmin เว็บมาสเตอร์ @ localhost DocumentRoot / var / www / html / YourFolder


1

ฉันทำให้/var/wwwเป็นลิงค์นุ่ม ๆ ไปยังไดเรกทอรีที่ต้องการ (เช่น/users/username/projects ) และสิ่งต่าง ๆ ก็ดีหลังจากนั้น

อย่างไรก็ตาม/var/wwwจำเป็นต้องลบต้นฉบับหรือเปลี่ยนชื่อเดิม


0

หากมีใครติดตั้งLAMPใน/optโฟลเดอร์แล้ว/etc/apache2ไม่ใช่สิ่งที่คุณกำลังมองหา

ค้นหาhttpd.confไฟล์ใน/opt/lampp/etc/httpd.confไฟล์ใน

เปลี่ยนบรรทัดในโฟลเดอร์นี้และบันทึกจากเทอร์มินัล



0

หากคุณกำลังใช้ Linux Mint (ความเห็นส่วนตัวจาก distros นี้ทำให้ฉันมีความสุข) ให้ทำตามนี้:

1- ไปที่ / etc / apache2 / sites-available และแก้ไข 000-default.conf 2- ค้นหา DocumentRoot ตัวอย่างเช่น DocumentRoot / var / www / html ที่คุณเปลี่ยนไปยังไดเรกทอรีของคุณ 3- เปิดเทอร์มินัลแล้วพิมพ์: sudo service apache2 restart

แก้ไข ----- ฉันรู้ว่าใน Mint คุณไปสำหรับ /etc/apache2/apache.conf ให้แทนที่ / var / www ไปยังพา ธ ของคุณตามลำดับมากกว่ารีสตาร์ทเซิร์ฟเวอร์ (ขั้นตอนที่ 3)

แค่นั้นแหละ.


0

ใช้กับUbuntu 14.04และรุ่นที่ใหม่กว่า ตรวจสอบให้แน่ใจว่าได้สำรองข้อมูลไฟล์ต่อไปนี้ก่อนทำการเปลี่ยนแปลงใด ๆ

1. เปิด/etc/apache2/apache2.confและค้นหา<Directory /var/www/>คำสั่งและแทนที่เส้นทางด้วย/home/<USERNAME>/public_htmlคำสั่งและแทนที่ด้วยเส้นทางคุณสามารถใช้ * แทน

2.Open /etc/apache2/sites-available/000-default.confและแทนที่DocumentRootคุณสมบัติค่าจากไป/var/www/html /home/<USERNAME>/public_htmlยังรวม<Directory /var/www/html>ไปถึง<Directory /home/<USERNAME>/public_htmlจะ

3. /etc/mods-available/php7.1.confเปิด ค้นหาและแสดงความคิดเห็นรหัสต่อไปนี้

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

อย่าเปิด php_admin_flag engine OFFตั้งค่าสถานะเป็นเหตุผลที่กล่าวถึงในความคิดเห็นด้านบนรหัส Directive รุ่น php สามารถเป็น 5.0, 7.0 หรืออะไรก็ได้ที่คุณติดตั้งไว้

สร้างไดเรกทอรีในpublic_htmlhome/<USERNAME>

เริ่มบริการ Apache sudo service apache2 restartโดยการดำเนินการคำสั่ง

ทดสอบโดยรันสคริปต์ตัวอย่างบนเซิร์ฟเวอร์


-3

หากคุณ (เช่นฉัน) ค้นหาโพสต์นี้ผ่าน Google:

ฉันพบมันที่ /etc/apache2/sites-available/000-default.conf


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