เปิดใช้งานการเขียน URL ใหม่ (mod_rewrite) โดยใช้ไฟล์. htaccess ใน ~ / Sites on Lion


13

ฉันไม่สามารถรับ mod_rewrite ให้ทำงานกับ Lion ได้ ฉันกำลังพัฒนาเว็บไซต์จำนวนมากในพื้นที่ใน ~ / Sites โดยใช้ไฟล์. htaccess ฉันใช้งาน 10.7.3 และฉันไม่ได้แตะไฟล์การตั้งค่าใด ๆ ยกเว้นการเปิดใช้งาน PHP ใน httpd.conf (ใช้งานได้)

ฉันรู้ว่ามีคำถามอย่างน้อย 2 ข้อเกี่ยวกับที่นี่ แต่โซลูชันที่มีรายละเอียดไม่ทำงาน หรือแก้ไขปัญหาอื่น ๆ ที่ฉันพบบนเว็บ ฉันต้องทำอะไรที่โง่หรือมองอะไรบางอย่างไม่เช่นนั้นฉันอาจจะบ้าไปแล้ว แต่มันก็ไม่ได้ผล

ฉันได้ลองทุกอย่างตามปกติแล้ว:

  1. ใน/private/etc/apache2/users/<myusername>.confเปลี่ยนAllowOverride Noneเป็นAllowOverride Allและรีสตาร์ทเว็บเซิร์ฟเวอร์

  2. นอกจากนี้ใน/private/etc/apache2/httpd.confเปลี่ยนรายการใด ๆ / ทั้งหมดของAllowOverride Noneเป็นAllowOverride All- ฉันได้ลองในสถานที่ต่างๆที่พบคำสั่งเหล่านี้

  3. ลองใช้การรวมกันของค่าที่เป็นไปได้ทั้งหมดสำหรับOptionsบรรทัดด้านบน / ด้านล่างAllowOverrideบรรทัดรวมถึงค่า:Indexes MultiViews FollowSymLinks All

รีสตาร์ทเว็บเซิร์ฟเวอร์ทุกครั้งหลังจากการเปลี่ยนแปลงเช่นนั้นแน่นอน ไม่มีงานนี้เลย URL สะอาดทั้งหมดของฉันไม่ทำงาน ฉันได้รับ 404 - ไม่พบ บันทึกข้อผิดพลาดของ Apache ให้ข้อผิดพลาด "ไม่มีไฟล์:" ดังนั้นดูเหมือนว่าโมดูล mod_rewrite จะไม่ทำงานเลย

ฉันทำให้แน่ใจว่า mod_rewrite ถูกโหลดใน httpd.conf ซึ่งก็คือ; เป็นค่าเริ่มต้นในการติดตั้ง Lion

สิ่งที่บ้าคือทุกอย่างทำงานได้อย่างสมบูรณ์ - จนกว่าฉันจะย้ายไปยังเครื่องใหม่ที่ใช้ Lion นั่นคือฉันกำลังพิจารณาข้อผิดพลาดในไฟล์. htaccess ของฉันเพราะฉันรู้ว่ามันใช้งานได้ก่อน นอกจากนี้หากเป็นข้อผิดพลาดใน. htaccess ฉันจะได้รับข้อความแสดงข้อผิดพลาดจากโมดูล mod_rewrite ใน error_log ของ Apache อย่างน้อยก็บอกฉันว่าโมดูลนั้นกำลังถูกเรียกใช้ แต่นี่ไม่ได้เกิดขึ้น

ฉันมองอะไรบางอย่าง ฉันต้องเปลี่ยนการตั้งค่าคอนฟิกที่อื่นไหม? ฉันต้องเปลี่ยนการตั้งค่าของ PHP หรือไม่ เหตุใดคำแนะนำ (เช่นวิธีเปิดใช้งาน mod_rewrite บน MacOSX Lionและการทำให้ mod_rewrite ทำงานบน Mac OS X ) ทำงานกับคนอื่น แต่ไม่ใช่สำหรับฉัน :)

ฉันเสียเวลากับเรื่องนี้ไปแล้ว ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


BTW ฉันไม่ต้องการใช้ MAMP ฉันเคยใช้ MAMP มาก่อนและมันก็ไม่ได้เล่นได้ดีกับ MySQL ที่มีอยู่แล้วในระบบของฉัน นี้จะถูกแทนที่ด้วยอาการปวดหัวปวดหัวอื่นดังนั้นไม่ขอบคุณ :)
นีลส์ Heidenreich

BTW ฉันใช้มาตรฐาน OS X Lion ไม่ใช่เซิร์ฟเวอร์ Lion
Niels Heidenreich

สิ่งนี้ไม่ได้ตอบคำถาม แต่อีกวิธีหนึ่งในการต่อสู้กับสภาพแวดล้อมในเครื่อง Mac ของคุณสำหรับการทำเว็บ dev คือการใช้งานVagrantซึ่งช่วยให้คุณติดตั้งและจัดการการกำหนดค่าเครื่องเสมือนได้อย่างง่ายดาย
ด่าน J

คำตอบ:


12

คุณควรตรวจสอบให้แน่ใจว่าใน /etc/apache2/users/username.conf คุณมีสิ่งต่อไปนี้:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

FollowSymlinks และ AllowOverride เป็นสิ่งจำเป็นที่นี่ ในขณะที่คุณกำลังพูดถึงคำถามของคุณทั้งคู่คุณอาจไม่ได้กำหนดค่าเหล่านี้ให้ถูกต้อง

ตรวจสอบให้แน่ใจใน httpd.conf /private/etc/apache2/extra/httpd-userdir.conf รวมอยู่ด้วย มันเป็นค่าเริ่มต้น

หลังจากการแก้ไขใด ๆ ให้รีสตาร์ทเว็บเซิร์ฟเวอร์เพื่อให้การเปลี่ยนแปลงมีผล

หากคุณยังคงมีปัญหาอยู่อาจมีปัญหากับกฎการเขียนซ้ำที่แท้จริงของคุณ คุณเคยใช้มันในบริบท. htaccess มาก่อนหรือไม่? โปรดทราบว่าใน. htaccess regex กฎการเขียนซ้ำจะถูกจับคู่กับ URI คำขอโดยไม่มีเครื่องหมายทับหน้าและสัมพันธ์กับไดเรกทอรีที่. htaccess อยู่เสมอในขณะที่ httpd.conf ส่วนกลาง URI จะต้องจับคู่กับเครื่องหมายทับชั้นนำและเป็น สัมพันธ์กับเว็บรูท เนื่องจากสมมติว่าคุณมี. htaccess อยู่ในไดเรกทอรีย่อยของ ~ / Sites กฎการเขียนซ้ำของคุณอาจทำงานแตกต่างจากเมื่อ. htaccess อยู่ในรูทเว็บของโฮสต์ (เสมือน)

ในการดีบัก mod_rewrite คุณสามารถเปิดใช้งานการบันทึกใหม่ คุณควรเปิดใช้งานใน /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

ขอบคุณเจอร์รี่ ใช่ฉันพยายามอย่างนั้น ลองอีกครั้ง ไม่ทำงานอย่างน่าเสียดาย ฉันยังไม่ได้เปลี่ยน. htaccess มันอยู่ใน ~ / Sites / …เหมือนเดิม สิ่งนี้น่าผิดหวังเกินไป :(
Niels Heidenreich

ลองเปิดใช้งานการบันทึกซ้ำเหมือนที่แก้ไขข้างต้น
เจอร์รี่

ตกลงไม่มีปัญหากับ mod_rewrite เลยดูเหมือนว่า; เป็นไฟล์. htaccess ที่ถูกละเว้นอย่างสมบูรณ์ ฉันสามารถวางขยะใด ๆ ลงในนั้นและฉันไม่ได้รับข้อความแสดงข้อผิดพลาด ดังนั้น Apache จึงไม่โหลด ฉันตรวจสอบการอนุญาตแล้วพวกเขาก็โอเค (ไฟล์นั้นอ่านได้ทั่วโลก) ฉันพยายามทำให้มันใช้งานได้ไม่มีการเปลี่ยนแปลง
Niels Heidenreich

ถ้าฉันวาง. htaccess ลงใน / Library / WebServer / Documents และเปิด " localhost " เพื่อทดสอบมันจะทำงานได้ตามที่คาดไว้ มันไม่ทำงานใน "~ / Sites"
Niels Heidenreich

ฉันทำสิ่งที่บ้าและสร้างบัญชีผู้ใช้ที่สองด้วยชื่อเข้าสู่ระบบ "testitester" ฉันตั้งค่า AllowOverride เป็น All ใน .conf ของผู้ใช้รายนั้น ฉันวาง. htaccess ที่มีขยะในโฟลเดอร์ Sites ของผู้ใช้ ถ้าฉันไปที่ localhost / ~ testitester ฉันได้รับข้อผิดพลาด 500 อย่างที่คาดไว้
Niels Heidenreich

1

การเพิ่มตัวเลือก + FollowSymLinksทำงานได้ดีสำหรับฉัน

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

สิ่งที่มันทำกับOptions +FollowSymLinks? ฉันเพิ่งเพิ่มบรรทัดนั้นมันใช้งานได้สำหรับฉัน
Kannika

1

ฉันประสบปัญหาคล้ายกันซึ่งไฟล์. htaccess ของฉันถูกเพิกเฉยอย่างสมบูรณ์ในขณะที่อยู่ในโฟลเดอร์ย่อยในไดเรกทอรี ~ / Sites ภายใต้ VirtualHost ที่ตั้งค่าไว้อย่างถูกต้อง

หลังจากใช้เวลาเล่นชั่วโมงสุดท้ายกับไฟล์การตั้งค่าที่แตกต่างกันและการตั้งค่า AllowOverride All ในหลาย ๆ ที่ในที่สุดฉันก็พบว่าไฟล์. htaccess ในขณะที่ดูเหมือนว่าไฟล์. htaccess ใน Finder จริงๆแล้วเป็นไฟล์. htaccess.txt ที่มี ซ่อนส่วนขยายแล้ว

ในการตรวจสอบและเปลี่ยนไฟล์. htaccess ของคุณให้คลิกขวาที่ไฟล์แล้วเลือกรับข้อมูลจากนั้นตรวจสอบให้แน่ใจว่าได้ลบส่วนขยายชั้นนำใด ๆ ออกจากท้ายสุดเช่นที่ฉันมี:

และตอนนี้มันใช้งานได้!


1

แก้ไขรายการ htaccess ด้านล่างสำหรับฉัน

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

วาง. htaccess ใน / Library / WebServer / Documents แล้วเปิด "localhost /"; เพื่อทดสอบใช้งานได้ตามที่คาดไว้ มันไม่ทำงานใน "~ / Sites" ขอบคุณ Niels Heidenreich สำหรับสิ่งนี้!


-1

เมื่อคุณพิมพ์: / Users / ชื่อผู้ใช้ / app_name

กระบวนการ / อ้างอิงถึงรูทของเว็บเซิร์ฟเวอร์:

"localhost /"

หากคุณใช้ / ~ ชื่อผู้ใช้ / app_name ในการเขียนใหม่มันควรจะทำงานได้


1
พา ธ ที่ขึ้นต้นด้วย/เป็นพา ธ ที่สมบูรณ์แบบสำหรับ Apache เสมอดูคำจำกัดความของรูทเว็บเซิร์ฟเวอร์ใน http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.