.htaccess จะถูกละเว้นแม้ว่า VirtualHost จะมี“ AllowOverride All”


25

ฉันใช้เซิร์ฟเวอร์ LAMP บน Fedora 13 ที่ใช้งานได้ดี อย่างไรก็ตามฉันเพิ่งเพิ่มไฟล์ ".htaccess" ลงในโฟลเดอร์ docroot ของเว็บไซต์ปัจจุบันที่ถูกเพิกเฉยอย่างสมบูรณ์

ฉันได้ลองทำแบบทดสอบต่าง ๆ ครึ่งโหลรวมถึงแบบทดสอบนี้แล้ว:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

แต่ภาพและหน้าอื่น ๆ ทั้งหมดโหลดได้ดีและไฟล์ที่ไม่มีอยู่ยังคงเป็น 404 ฉันยังลองนี้:

order deny,allow
deny from all

แต่ทุกหน้ายังคงโหลดได้ดี อีกครั้งไฟล์. htaccess จะถูกละเว้นเพียง 100%

เราใส่เร็กคอร์ด virtualhost ของเราใน /etc/httpd/conf.d/virtual.conf ดูเหมือนว่านี้:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

มีอะไรอีกบ้างที่ทำให้เซิร์ฟเวอร์ของเราเสีย.htaccessไฟล์อย่างสมบูรณ์?

แก้ไข:

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

แก้ไข 2:

ตกลงฉันมีข้อมูลใหม่! เพียงเพื่อจุดประสงค์ในการทดสอบฉันผ่านและเปลี่ยนแปลงคำสั่ง "AllowOverride" ทุกAllowOverride Allครั้งเป็น ฉันคิดออกว่ารายการ Directory แรกดูเหมือนว่าจะเอาชนะคนอื่น ๆ ทั้งหมด:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

เมื่อฉันเปลี่ยนสิ่งนั้นเป็นAllowOverride Allไฟล์. htaccess ของฉันจะเริ่มมีผลบังคับใช้ มันเหมือนกับAllowOverride Allคำสั่งอื่น ๆ ทั้งหมดในไฟล์ปรับแต่งของฉันกำลังถูกเพิกเฉย!

สิ่งที่ช่วยให้??

คำตอบ:


32

เหลือเชื่อ. จำได้ไหมว่าฉันพูดว่านี่เป็นเซิร์ฟเวอร์การพัฒนา ใช่ .. นี่คือสิ่งที่รายการโฮสต์เสมือนของฉันดูเหมือนจริง ๆ :

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

คุณเห็นมันไหม ฉันก็ไม่ได้ ฉันลืมเปลี่ยน "Directory" ของฉันเป็น dev.ourwebsite.com แทน ourwebsite.com - และนั่นทำให้เกิดความแตกต่าง ฉันแค่สันนิษฐานว่า Apache จะโยนข้อผิดพลาดหากไม่มีไดเรกทอรีอยู่ แต่นั่นใช้กับคำสั่ง DocumentRoot เท่านั้น เป็นการจับคู่ - หมายถึงมันใช้กฎหากตรงกับคำขอที่เข้ามา แต่ไม่เช่นนั้นจะไม่สนใจว่าคุณบอกให้ AllowOverride บน magic unicorns หรือไม่

ปล่อยให้เรื่องนี้เป็นบทเรียนสำหรับคนอื่น ๆ ที่กำลังมองหา - เมื่อทุกคนล้มเหลวให้พิจารณา Typo ยิ่งใหญ่


ฉันไม่เคยเป็นล้านปีเลย ฉันยังมีการพิมพ์ผิดในเส้นทางไดเรกทอรียังเป็นโครงการ dev ... ขอบคุณที่เปิดตาของฉัน
gillytech

ฉันก็มีการพิมพ์ผิดในส่วนไดเรกทอรี จริง ๆ แล้วมันน่าผิดหวังมาก มันเป็นพระพรที่ฉันได้รับสิ่งนี้และรู้ถึงความจริงที่ว่าฉันสามารถทำผิดพลาดอย่างสุด ๆ
Akash Kumar Sharma

ฉันรู้ว่าเป็นเวลา 7 ปีแล้ว แต่ฉันแค่อยากจะเข้ามาและพูดว่าคำตอบนี้แค่ช่วยฉัน มันเป็นสิ่งเดียวกัน ฉันคัดลอกคำสั่งจากโฮสต์เสมือนอื่นและเปลี่ยนบิตผิด ขอบคุณสำหรับการแบ่งปันข้อมูลนี้! ท่องอย่างฉลาด
dolst

5

ตรวจสอบว่ามี "AllowOverride None" อื่นใดที่แสดงใน 'httpd.conf' เหนือการประกาศ virtualhosts หรือไม่ อาจเป็นไปได้ว่าคุณมี "AllowOverride None" ใน docroot


เซิร์ฟเวอร์ที่ฉันทำงานด้วยเป็นเซิร์ฟเวอร์สำหรับการพัฒนาและเป็นเซิร์ฟเวอร์ที่ใช้งานจริงของเรา ไฟล์ httpd.conf เหมือนกันในทางปฏิบัติ ความแตกต่างอย่างมีนัยสำคัญเพียงว่า "virtual.conf" dev.ของเราบนเซิร์ฟเวอร์นี้มีรายการน้อยลงและแต่ละเว็บไซต์จะนำหน้าด้วย แต่เซิร์ฟเวอร์ที่ใช้งานจริงนั้นทำงานได้ดีไฟล์. htaccess จะทำงานได้อย่างถูกต้องและเซิร์ฟเวอร์สำหรับการพัฒนาจะไม่สนใจไฟล์. htaccess โดยสิ้นเชิง
Brian Lacy

0

สามเดา:

คือมีจริงช่องว่างหลังเครื่องหมายจุลภาคในบรรทัดที่order deny, allowใน.htaccess? Apache ไม่ชอบสิ่งนั้น สำหรับฉันใน F13 ฉันได้รับ 500s

คุณมีAccessFileNameคำสั่งทุกที่หรือไม่?

หากคุณกำลังใช้ selinux คุณมีบริบทที่ถูกต้องสำหรับไฟล์ ( ls -lZ)?


ฉันไม่ได้รับข้อผิดพลาด 500 ครั้ง ไฟล์. htaccess จะถูกละเว้น และฉันยืนยันว่าฉันไม่มีที่ว่างในนั้น ฉันไม่รู้อะไรเกี่ยวกับ selinux หรือบริบท แต่ฉันค้นหาวิธีตรวจสอบและเห็นได้ชัดว่ามันเป็น Disabled สำหรับAccessFileNameฉันจะดูรอบ ๆ แต่อย่างที่ฉันพูดในความคิดเห็นของฉันเกี่ยวกับคำตอบของ Denis การกำหนดค่า apache สำหรับเซิร์ฟเวอร์ทั้งสองนี้เหมือนกันอย่างมีประสิทธิภาพ
Brian Lacy

ฉันยังมีปัญหากับพื้นที่ มันทำให้ฉันเป็นบ้า
egorgry

อ๊ะการแก้ไข: ฉันมีคำสั่ง AccessFileName ใน httpd.conf ของฉัน อ่านดังนี้:AccessFileName .htaccess
Brian Lacy

0

ฉันมีสิ่งนี้บนเซิร์ฟเวอร์ใหม่ในที่สุดก็ตระหนักว่า mod-rewrite ไม่ได้ถูกเปิดใช้งานตามค่าเริ่มต้น

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