wamp localhost ทำงานได้ แต่ไม่สามารถแสดงหน้าได้


2

ฉันติดตั้ง wamp และวางหน้าของฉันในโฟลเดอร์ www นอกจากนี้ไอคอนของ wamp เป็นสีเขียว

เมื่อฉันเข้าถึง localhost จากเบราว์เซอร์ของฉันฉันจะได้รับหน้าจอเริ่มต้นของ wamp และมีลิงก์ไปยังหน้าของฉัน แต่เมื่อฉันคลิกที่มันจะเกิดข้อผิดพลาด:

ความคิดแปลก ๆ ก็คือมันใช้งานได้สองสามครั้งแล้วก็หยุดกึก


คุณมีโฟลเดอร์ "htdocs" หรือไม่ c:\wamp\htdocs? จะง่ายกว่าถ้าคุณสร้างโฟลเดอร์ภายใน htdocs และสร้างไฟล์ index.html, index.htm หรือ index.php เพื่อให้คุณสามารถไปที่https://localhost/myfolderและมันจะอ่านไฟล์ดัชนีโดยอัตโนมัติและแสดงเนื้อหาของหน้า ...
Kinnectus

2
บันทึกพูดว่าอะไร? ควรอยู่ใน c: \ wamp \ logs \ ...
ssnobody

คำตอบ:


4

WAMPServer 2.5 โฮมเพจเมนูโครงการของคุณและโฮสต์เสมือน

มีการเปลี่ยนแปลงแนวคิดใน WampServer 2.5 และมีเหตุผลที่ดีสำหรับการเปลี่ยนแปลงนี้!

ใน WampServer 2.5 ตอนนี้ขอแนะนำอย่างจริงจังให้สร้างโฮสต์เสมือนสำหรับแต่ละโครงการของคุณแม้ว่าคุณจะค้างไว้ใน\wamp\www\subfolderโครงสร้าง

เอกสารโฮสต์เสมือน

ตัวอย่างโฮสต์เสมือน

หน้าแรกของ WampServer (\ wamp \ www \ index.php) ตอนนี้คาดว่าคุณจะสร้างโฮสต์เสมือนสำหรับโครงการทั้งหมดของคุณและจะทำงานได้อย่างถูกต้องเฉพาะเมื่อคุณทำเช่นนั้น

ประวัติศาสตร์

เพื่อให้ง่ายขึ้นสำหรับผู้เริ่มต้นใช้ WampServer เพื่อเรียนรู้ PHP Apache และ MySQL เราแนะนำให้คุณสร้างโฟลเดอร์ย่อยภายใต้\wamp\www\โฟลเดอร์

wamp
  |-- www
       |-- Chapter1
       |-- Chapter2
       |-- etc

โฟลเดอร์ย่อยเหล่านี้จะแสดงให้เห็นการเชื่อมโยงใน WampServer โฮมเพจภายใต้เมนูที่เรียกว่า 'โครงการของคุณ' localhost/subfoldernameและการเชื่อมโยงเหล่านี้จะมีการเชื่อมโยงไปยัง

ยอมรับได้เฉพาะบทเรียนง่ายๆ

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

ปัญหาการพัฒนาเว็บไซต์จริง

เหตุผลสำหรับเรื่องนี้คือแน่นอนว่าการตั้งค่า DocumentRoot เริ่มต้นสำหรับ wamp คือ

DocumentRoot "c:/wamp/www/"

ไม่ว่าโฟลเดอร์ย่อยของคุณชื่ออะไร สิ่งนี้กล่าวถึงบ่อยครั้งที่ใช้โค้ด PHP ที่สอบถามโครงสร้างหรือเว็บไซต์ของคุณได้รับข้อมูลที่แตกต่างกันเมื่อทำงานในการพัฒนา WampServer ของคุณกับสิ่งที่จะได้รับเมื่อทำงานบนเซิร์ฟเวอร์ที่โฮสต์สดโดยที่ DocumentRoot ชี้ไปที่โฟลเดอร์ด้านบนของเว็บไซต์ ลำดับชั้นของไฟล์ รหัสประเภทนี้มีอยู่ในหลาย ๆ เฟรมเวิร์คและ CMS ตัวอย่างเช่น WordPress และ Joomla เป็นต้น

ตัวอย่างเช่น

ช่วยบอกว่าเรามีโครงการที่เรียกว่า project1 จัดขึ้นในwamp\www\project1และทำงานไม่ถูกต้องเป็นlocalhost/project1/index.php

นี่คือสิ่งที่จะรายงานโดยคำสั่ง PHP ที่เป็นปัญหา:

$_SERVER['HTTP_HOST'] = localhost
$_SERVER['SERVER_NAME'] = localhost
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www

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

$_SERVER['HTTP_HOST'] = project1
$_SERVER['SERVER_NAME'] = project1
$_SERVER['DOCUMENT_ROOT'] = c:/wamp/www/project1

ตอนนี้ความแตกต่างอาจดูเล็กน้อยในตอนแรก แต่ถ้าคุณใช้เฟรมเวิร์กอย่าง WordPress หรือ CMS อย่าง Joomla อย่างนี้ก็สามารถทำให้เกิดปัญหาเมื่อคุณย้ายเว็บไซต์ของคุณไปยังเซิร์ฟเวอร์ที่ใช้งานจริง

วิธีการสร้างโฮสต์เสมือนใน WampServer

ที่จริงแล้วสิ่งนี้ควรใช้งานได้เหมือนกันสำหรับเซิร์ฟเวอร์ Apache ใด ๆ ที่มีความแตกต่างเฉพาะที่คุณอาจพบไฟล์กำหนดค่า Apache

มี 3 ขั้นตอนในการสร้างโฮสต์เสมือนแรกของคุณใน Apache และเพียง 2 ถ้าคุณมีหนึ่งกำหนดไว้แล้ว

  1. สร้างคำจำกัดความโฮสต์เสมือน
  2. เพิ่มชื่อโดเมนใหม่ของคุณไปยังไฟล์ HOSTS
  3. ยกเลิกหมายเหตุบรรทัดใน httpd.conf ที่มีไฟล์ข้อกำหนด Virtual Hosts

ขั้นตอนที่ 1สร้างคำจำกัดความโฮสต์เสมือน

แก้ไขไฟล์ชื่อhttpd-vhosts.confWampServer ที่ยังใช้งานอยู่

\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf

(หมายเลขรุ่น Apache อาจแตกต่างกันโปรดใช้ความคิดก่อนดำเนินการต่อ)

หากนี่เป็นครั้งแรกที่คุณแก้ไขไฟล์นี้ให้ลบโค้ดตัวอย่างเริ่มต้นออกซึ่งไม่มีประโยชน์

ฉันสมมติว่าเราต้องการสร้างคำนิยามสำหรับไซต์ที่เรียกว่า project1 ที่ใช้งานได้

\wamp\www\project1

สำคัญมากอันดับแรกเราต้องตรวจสอบให้แน่ใจว่า localhost ยังคงใช้งานได้นั่นคือคำจำกัดความ VHOST แรกที่เราจะใส่ในไฟล์นี้

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    <Directory  "c:/wamp/www">
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

ตอนนี้เรากำหนดโครงการของเรา: และแน่นอนว่าคุณทำเพื่อโครงการแต่ละโครงการของคุณเมื่อคุณเริ่มโครงการใหม่

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/project1"
    ServerName project1
    <Directory  "c:/wamp/www/project1">
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

หมายเหตุ: ว่าแต่ละโฮสต์เสมือนตามที่DocumentRootกำหนดไว้ นอกจากนี้ยังมีพารามิเตอร์อื่น ๆ อีกมากมายที่คุณสามารถเพิ่มลงในคำจำกัดความโฮสต์เสมือนตรวจสอบเอกสาร Apache

ขนาดเล็กกัน

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

Require local

การแฮ็คแบบชั่วคราวใด ๆ จากที่อยู่ภายนอกจะได้รับข้อผิดพลาดและไม่เข้าสู่พีซีของคุณ แต่หากคุณสะกดชื่อโดเมนคุณจะแสดงหน้าแรกของ WampServer เนื่องจากคุณอยู่บนพีซีเครื่องเดียวกับ WampServer และlocalก่อนหน้านี้

ขั้นตอนที่ 2 :

เพิ่มชื่อโดเมนใหม่ของคุณไปยังไฟล์ HOSTS ตอนนี้เราต้องเพิ่มชื่อโดเมนที่เราใช้ในการกำหนดโฮสต์เสมือนในไฟล์โฮสต์เพื่อให้ windows รู้ว่าจะหาได้ที่ไหน สิ่งนี้คล้ายคลึงกับการสร้างระเบียน DNS A แต่จะปรากฏเฉพาะในกรณีนี้ในพีซีนี้โดยเฉพาะ

แก้ไข C:\windows\system32\drivers\etc\hosts

ไฟล์ไม่มีส่วนขยายและควรเป็นเช่นนั้น ระวัง Notepad เพราะอาจลองและเพิ่ม.txtส่วนขยายหากคุณไม่มีโปรแกรมแก้ไขที่ดีกว่า ฉันแนะนำให้คุณดาวน์โหลด Notepad ++ ซึ่งเป็นโปรแกรมฟรีและเป็นตัวแก้ไขที่ดีมาก

และนี่เป็นไฟล์ที่ได้รับการป้องกันดังนั้นคุณต้องแก้ไขด้วยสิทธิ์ผู้ดูแลระบบเพื่อเปิดใช้ตัวแก้ไขโดยใช้ตัวเลือกเมนูเรียกใช้ในฐานะผู้ดูแลระบบ

ไฟล์โฮสต์ควรมีลักษณะเช่นนี้เมื่อคุณแก้ไขเสร็จแล้ว

127.0.0.1 localhost
127.0.0.1 project1

::1 localhost
::1 project1

โปรดทราบว่าคุณควรมีคำจำกัดความที่นี่สำหรับที่อยู่ลูปแบ็ค IPV4 127.0.0.1และที่อยู่ลูปแบ็ค IPV6 ::1เนื่องจาก Apache ตอนนี้รับรู้ IPV6 แล้วและเบราว์เซอร์จะใช้ IPV4 หรือ IPV6 หรือทั้งสองอย่าง ฉันไม่รู้ว่าจะตัดสินใจเลือกใช้แบบไหน แต่ก็สามารถใช้อย่างใดอย่างหนึ่งได้หากคุณเปิด IPV6 สแต็กและระบบปฏิบัติการหน้าต่างส่วนใหญ่ใช้ XP SP3

ตอนนี้เราต้องบอกให้ windows รีเฟรชแคชชื่อโดเมนดังนั้นเปิดหน้าต่างคำสั่งอีกครั้งโดยใช้ตัวเลือกเมนูRun as Administratorอีกครั้งและทำดังต่อไปนี้

net stop dnscache
net start dnscache

project1กองกำลังนี้หน้าต่างเพื่อล้างแคชชื่อโดเมนและโหลดมันในการโหลดมันจะอีกครั้งอ่านแฟ้มโฮสต์ดังนั้นตอนนี้มันรู้เกี่ยวกับโดเมน

ขั้นตอนที่ 3 : ยกเลิกหมายเหตุบรรทัดใน httpd.conf ที่มีไฟล์คำจำกัดความโฮสต์เสมือน

แก้ไข httpd.conf ของคุณใช้เมนู wampmanager.exe เพื่อให้แน่ใจว่าคุณแก้ไขไฟล์ที่ถูกต้อง

ค้นหาบรรทัดนี้ใน httpd.conf

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

และเพียงแค่ลบ#เพื่อไม่แสดงข้อคิดเห็นบรรทัดนั้น

เพื่อเปิดใช้งานการเปลี่ยนแปลงนี้ในขณะที่คุณกำลังใช้งาน Apache ตอนนี้เราต้องหยุดและเริ่มบริการ Apache ใหม่

wampmanager.exe -> Apache -> Service -> Restart Service

ตอนนี้ถ้าไอคอน WAMP ในซิสเต็มเทรย์ไม่ได้เป็นสีเขียวอีกครั้งนั่นหมายความว่าคุณอาจทำสิ่งผิดปกติใน\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.confไฟล์

ถ้าเป็นเช่นนี้เป็นกลไกที่มีประโยชน์ในการค้นหาสิ่งที่ผิด จะใช้คุณสมบัติของ Apache exe (httpd.exe) เพื่อตรวจสอบไฟล์กำหนดค่าและรายงานข้อผิดพลาดโดยชื่อไฟล์และหมายเลขบรรทัด

เรียกใช้หน้าต่างคำสั่ง

cd \wamp\bin\apache\apache2.4.9\bin
httpd -t

ดังนั้นแก้ไขข้อผิดพลาดและทดสอบซ้ำอีกครั้งจนกว่าคุณจะได้รับผลลัพธ์

Syntax OK

ตอนนี้มีอีกหนึ่งสิ่ง

มีรายการเมนูใหม่ 2 รายการในระบบเมนู wampmanager หนึ่งเรียกว่า [b] 'My Projects' [/ b] ซึ่งถูกเปิดใช้งานตามค่าเริ่มต้น และอันที่สองเรียกว่า [b] 'My Virtual Hosts' [/ b] ซึ่งไม่ได้เปิดใช้งานโดยค่าเริ่มต้น

'โครงการของฉัน' จะแสดงรายการไดเรกทอรีย่อยใด ๆ ของไดเรกทอรี \ wamp \ www และให้ลิงก์เพื่อเปิดเว็บไซต์ในไดเรกทอรีย่อยนั้น อย่างที่ฉันพูดไปก่อนหน้านี้มันเปิดตัว 'project1` และไม่ใช่' localhost / project1 'เพื่อให้ลิงก์ทำงานเราต้องสร้างคำจำกัดความโฮสต์เสมือนเพื่อให้ลิงก์นี้เปิดใช้ไซต์นั้นจริงในเบราว์เซอร์ของคุณ เรียกใช้การค้นหาเว็บสำหรับชื่อไซต์เป็นคำหลักหรือเพียงแค่ส่งคืนไซต์ที่ไม่พบเงื่อนไข

รายการเมนู 'My Virtual Hosts' นั้นแตกต่างกันเล็กน้อย มันค้นหาไฟล์ที่ใช้ในการกำหนดโฮสต์เสมือน (เราจะไปที่นั้นในนาที) และสร้างการเชื่อมโยงเมนูสำหรับแต่ละพารามิเตอร์ ServerName มันค้นหาและสร้างรายการเมนูสำหรับแต่ละคน สิ่งนี้อาจดูสับสนเล็กน้อยเมื่อเราสร้างคำจำกัดความโฮสต์เสมือนสำหรับไดเรกทอรีย่อยของโฟลเดอร์ \ wamp \ www บางรายการจะปรากฏบนเมนู 'โครงการของฉัน' และเมนู 'โฮสต์เสมือนของฉัน'

ฉันจะเปิดเมนู 'โฮสต์เสมือนของฉัน' อื่นได้อย่างไร

  • ทำสำเนาสำรองของไฟล์ \ wamp \ wampmanager.tpl ในกรณีที่คุณทำผิดมันเป็นไฟล์ที่สำคัญมาก
  • แก้ไข \ wamp \ wampmanager.tpl
  • ค้นหาพารามิเตอร์นี้;WAMPPROJECTSUBMENUในส่วน '[Menu.Left]'
  • เพิ่มพารามิเตอร์ใหม่นี้;WAMPVHOSTSUBMENUก่อนหรือหลัง;WAMPPROJECTSUBMENUพารามิเตอร์
  • บันทึกไฟล์
  • ตอนนี้คลิกขวาที่ไอคอน wampmanager และเลือก 'รีเฟรช' หากนี่ไม่ได้เพิ่มเมนู 'exit' และรีสตาร์ท wampmanager

Big Note เมนูใหม่จะปรากฏขึ้นก็ต่อเมื่อคุณได้กำหนดโฮสต์เสมือนไว้แล้ว! มิฉะนั้นคุณจะไม่เห็นความแตกต่างจนกว่าคุณจะกำหนด VHOST

ตอนนี้ถ้าคุณนำสิ่งนี้ไปยังส่วนขยายตรรกะ

ตอนนี้คุณสามารถย้ายรหัสเว็บไซต์ของคุณอย่างสมบูรณ์นอก\wamp\โครงสร้างโฟลเดอร์เพียงแค่เปลี่ยนพารามิเตอร์ DocumentRoot ในคำจำกัดความของ VHOST ตัวอย่างเช่นคุณสามารถทำได้:

สร้างโฟลเดอร์บนดิสก์ wamp หรือดิสก์อื่น ๆ (ระวังไดรฟ์เครือข่ายพวกเขาจะซับซ้อนกว่าเล็กน้อย)

D:
MD websites
CD websites
MD example.com
CD example.com
MD www

ตอนนี้คุณคัดลอกรหัสไซต์ของคุณไปที่หรือเริ่มสร้างมันใน\websites\example.com\wwwโฟลเดอร์และกำหนด VHOST ของคุณเช่นนี้:

<VirtualHost *:80>
    DocumentRoot "d:/websites/example.com/www"
    ServerName example.dev
    ServerAlias www.example.dev
    <Directory  "d:/websites/example.com/www">
        AllowOverride All
        Require all granted
    </Directory>

    php_flag display_errors Off
    php_flag log_errors On

    php_value max_upload_size 40M
    php_value max_execution_time 60
    php_value error_log "d:/wamp/logs/example_com_phperror.log"
</VirtualHost>

จากนั้นเพิ่มโดเมนการพัฒนาใหม่นี้ในไฟล์โฮสต์:

127.0.0.1 localhost
::1 localhost

127.0.0.1 project1
::1 project1

127.0.0.1 example.dev
::1 example.dev

หมายเหตุ: ไม่ใช่ความคิดที่ดีที่จะใช้ ServerName หรือ ServerAlias ​​ที่เหมือนกับชื่อโดเมนสดของคุณราวกับว่าเราใช้ example.com เป็น ServerName นั่นหมายความว่าเราไม่สามารถไปยังไซต์สดจริงได้อีกต่อไป PC อย่างที่มันจะนำ example.com ไปยัง 127.0.0.1 เช่นพีซีนี้และไม่ได้เชื่อมต่อกับอินเทอร์เน็ต

นอกจากนี้: เห็นว่าฉันอนุญาตให้ไซต์นี้เข้าถึงได้จากอินเทอร์เน็ตจากภายในคำจำกัดความของ VHOST การเปลี่ยนแปลงนี้จะมีผลกับไซต์นี้เท่านั้นและไม่มีอื่นใด มีประโยชน์มากสำหรับการอนุญาตให้ไคลเอ็นต์ดูการเปลี่ยนแปลงของคุณเป็นเวลาหนึ่งชั่วโมงหรือมากกว่านั้นโดยไม่ต้องคัดลอกไปยังเซิร์ฟเวอร์สด นี่หมายความว่าเราต้องแก้ไขไฟล์นี้ด้วยตนเองเพื่อเปิดและปิดการเข้าถึงนี้แทนที่จะใช้รายการเมนู Put Online / Offline บน wampmanager

นอกจากนี้ฉันได้เพิ่มการแก้ไขบางอย่างในการกำหนดค่า PHP อีกครั้งที่จะใช้กับเว็บไซต์นี้เท่านั้น มีประโยชน์มากเมื่อบำรุงรักษาไซต์ที่มีข้อกำหนดเฉพาะซึ่งแตกต่างจากไซต์อื่น ๆ ทั้งหมดที่คุณบำรุงรักษา ฉันเดาว่าเราสามารถสันนิษฐานได้จากพารามิเตอร์ที่ใช้ว่ามีหน้ายาวอยู่ในนั้นและเขียนได้แย่มากและจะไม่ทำงานโดยมีข้อผิดพลาดปรากฏบนเบราว์เซอร์โดยไม่ทำให้หน้ายุ่งเหยิง เชื่อว่าเว็บไซต์ที่ผมเป็นแบบนี้อยู่และผู้คนยังคงต้องการให้พวกเขารักษาไม่ดี แต่นี่หมายความว่าเราจะต้องเปลี่ยนพารามิเตอร์เหล่านี้สำหรับไซต์นี้โดยเฉพาะและไม่ใช่ทั่วโลกเป็นเว็บไซต์เสมือนทั้งหมดที่ทำงานบน WampServer


2
+1 สิ่งนี้มีประโยชน์มาก! เฉพาะไฟล์ไม่ได้อยู่ดังนั้นแทนที่จะฉันแก้ไขhttpd-hosts.conf httpd-vhosts.conf
A1rPun

2
@ A1rPun ขอบคุณที่ตรวจพบข้อผิดพลาดในการสะกดคำ ฉันได้แก้ไขมันในคำตอบ มันควรจะได้รับhttpd-vhosts.confเช่นเดียวกับคุณสันนิษฐานว่า
RiggsFolly

0

คุณต้องสร้างโฮสต์เสมือนก่อน สามารถทำได้ง่ายๆโดยใช้ WAMP'S Add a Virtual HostUtility
สำหรับขั้นตอนในการสร้างการเยี่ยมชมโฮสต์เสมือน: วิธีสร้างโฮสต์เสมือนทีละขั้นตอน


1
ยินดีต้อนรับสู่ Super User! โปรดอ้างอิงส่วนสำคัญของคำตอบจากลิงค์อ้างอิงเนื่องจากคำตอบอาจไม่ถูกต้องหากหน้าเชื่อมโยงมีการเปลี่ยนแปลง
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.