คุณต้องรีสตาร์ท apache เพื่อให้กฎการเขียนซ้ำใน. htaccess มีผลหรือไม่


99

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

คำตอบ:


95

ไม่จำเป็นต้องรีสตาร์ทสำหรับการเปลี่ยนแปลง. htaccess อย่างอื่นผิด

ตรวจสอบให้แน่ใจว่า. htaccess ของคุณมีคำสั่ง

RewriteEngine บน

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

สุดท้ายคุณสามารถเปิดใช้งานบันทึกการเขียนซ้ำโดยใช้คำสั่งต่อไปนี้ใน httpd.conf ของคุณ:

RewriteLog "บันทึก / rewritelog"

RewriteLog ระดับ 7

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


3
นี่เป็นเพียงเล็กน้อยที่ล้าสมัย ฉันพบปัญหาที่คล้ายกันและต้องการดีบักการเขียนซ้ำของฉันสำหรับกรณีการใช้งานเฉพาะ ฉันลองใช้วิธีนี้แล้ว แต่หลังจากความยุ่งยากและการขุดค้นเล็กน้อยฉันก็พบว่าปัญหาคืออะไร สำหรับ apache เวอร์ชันเก่ากว่า สำหรับ apache2.4> แทนที่ RewriteLog & LogLevel ด้านบนด้วย: LogLevel alert rewrite:trace7. หลังจากรีสตาร์ท apacheคุณจะเห็นร่องรอยใน error.log หวังว่าจะช่วยได้ http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes

ฉันใช้ apache 2.4 บน Debian, WSL และไม่มีการกำหนดค่า httpd ไม่รู้จัก htaccess ของฉัน
Timo

52

ไม่ :

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


หากคุณได้เพิ่มชื่อผู้ใช้เป็น 'ต้องการผู้ใช้' ในไฟล์ที่เปิดใช้งานไซต์ของคุณฉันพบในเชิงประจักษ์ว่าคุณไม่จำเป็นต้องรีสตาร์ท คนที่สง่างามทำมัน
รอส

18

จากเอกสารเกี่ยวกับ apache: โดยทั่วไปปัญหาคือ AllowOverride ไม่ได้ตั้งค่าเพื่อให้คำสั่งการกำหนดค่าของคุณได้รับเกียรติ ตรวจสอบให้แน่ใจว่าคุณไม่มี AllowOverride None สำหรับขอบเขตไฟล์ที่เป็นปัญหา การทดสอบที่ดีคือการใส่ขยะในไฟล์. htaccess และโหลดซ้ำ หากไม่ได้สร้างข้อผิดพลาดของเซิร์ฟเวอร์แสดงว่าคุณมี AllowOverride None อยู่เกือบแน่นอน


1
การทิ้งลิงก์ไปยัง Apache - AllowOverride
scunliffe

2
ฉันเพิ่มบรรทัดนี้ "<directory /> </directory>" ใน. htaccess ของฉันเพื่อสร้างข้อผิดพลาดในบันทึก มันจะขึ้นว่า "<Directory not allowed here" และฉันรู้ว่ามันกำลังอ่านไฟล์ของฉัน
Mnebuerquo

3

เฉพาะในกรณีที่คุณไม่ได้เพิ่มโมดูล mod_rewrite ลงใน Apache

คุณต้องรีสตาร์ท Apache ก็ต่อเมื่อคุณเปลี่ยนไฟล์ Apache ".conf"


2

ฉันมีปัญหาเดียวกันและดูเหมือนว่าโพสต์ PiedPiper เกี่ยวกับ AllowOverride จะมีประโยชน์มากที่สุด ตรวจสอบไฟล์ httpd.conf ของคุณสำหรับ "AllowOverride" และตรวจสอบว่าตั้งค่าเป็นทั้งหมด


1
โพสต์ที่เกี่ยวข้อง: วิธีตั้งค่า AllowOverride ทั้งหมด
Zach Saucier

2

ในกรณีที่. htaccess ไม่จำเป็นต้องรีสตาร์ทหากไม่ทำงานสาเหตุที่เป็นไปได้ ได้แก่

  • AllowOverrideไม่สามารถตั้งค่าที่ผู้ใช้สามารถตั้งค่าภายใน httpd.conf หรืออาจต้องติดต่อผู้ดูแลระบบเซิร์ฟเวอร์

  • ตรวจสอบชื่อไฟล์ของ .htaccess มันควรจะเป็น .htaccess ไม่ htaccess.txt ดูที่นี่สำหรับคำแนะนำวิธีการสร้างหนึ่ง

  • ลองใช้Options -Indexesหรือdeny allคำสั่งง่ายๆเพื่อดูว่าใช้งานได้หรือไม่

  • ล้างแคชของเบราว์เซอร์ทุกครั้งหากมีกฎสำหรับการเปลี่ยนเส้นทางหรือสิ่งที่คล้ายกันหากการเปลี่ยนเส้นทางก่อนหน้าถูกแคชไว้ดูเหมือนว่าสิ่งต่างๆไม่ทำงาน


0

มีอะไรอยู่ใน. htaccess ของคุณ RewriteRules? ตรวจสอบว่าได้ติดตั้งและเปิดใช้งาน mod_rewrite แล้ว

อย่างอื่น? ลองตั้งค่า AllowOverride เป็น 'all' บนไดเร็กทอรีนั้น

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