นี่เป็นวิธีที่ถูกต้องในการเปิดใช้งาน htaccess ใน Apache 2.4.7


46

ในเกือบทุกทางออกของ "วิธีการเปิดใช้งาน htaccess" พวกเขาบอกว่าไฟล์ / etc / apache2 / sites-available / default จะต้องได้รับการแก้ไข แต่ไม่มีไฟล์ดังกล่าวใน Apache 2.4.7

ฉันอ่านบางแห่งว่าไฟล์เริ่มต้นใหม่คือ 000-default.conf ดังนั้นฉันจึงแก้ไขและพยายามเพิ่มบรรทัด:

AllowOverride All

แต่ Apache2 ไม่รีสตาร์ทอย่างถูกต้องและทำให้เกิดข้อผิดพลาด จากเอกสาร apache2 ฉันพบว่า AllowOverride อนุญาตเฉพาะใน<Directory>ส่วน จากนั้นฉันลองเพิ่มสิ่งนี้:

<Directory "/var/www">
AllowOverride All
</Directory>

และดูเหมือนว่าจะทำงาน แต่ฉันไม่แน่ใจว่าควรใส่ / var / www ที่นั่นหรือไม่ มันเป็นวิธีที่ถูกต้องในการทำหรือคอมพิวเตอร์ของฉันจะระเบิดอย่างใด?


ดูนี่. มันอาจช่วยคุณได้ stackoverflow.com/questions/33062142/…
Avnish alok

คำตอบ:


58

TL; DR

ใช่มันเป็นวิธีที่ถูกต้อง
แต่จะมีความหมายมากขึ้น: ใช่มันเป็นวิธีที่ถูกต้องในการอนุญาตให้.htaccessแทนที่คำสั่งทั้งหมดใน/var/wwwไดเรกทอรี


ตามที่คุณค้นพบAllowOverrideจะได้รับอนุญาตเฉพาะภายใต้Directoryส่วน

ใช้ตัวอย่างของคุณ:

<Directory "/var/www">
    AllowOverride All
</Directory>

นี่คือการบอก apache ว่าการกำหนดค่าทั้งหมดสามารถถูกแทนที่ใน/var/wwwและไดเรกทอรีย่อยทั้งหมด (ซ้ำ)


สำหรับตัวอย่างที่ดีกว่าให้พิจารณาว่าคุณมีการกำหนดค่าต่อไปนี้ในโฮสต์เสมือนของคุณ:

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

และโครงสร้างไดเรกทอรีต่อไปนี้:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

สิ่งที่ฉันทำที่นี่สร้าง.htaccessในทุกไดเรกทอรีย่อยของ/var/wwwไดเรกทอรี
มันมักจะไม่เป็นเช่นนั้น แต่นี่เป็นเพียงเพื่อประโยชน์ของตัวอย่าง

การเปรียบเทียบโครงสร้างไดเรกทอรีกับการกำหนดค่าหมายความว่า.htaccessไฟล์ทั้งหมดที่อยู่ใน/var/wwwโฟลเดอร์และไดเรกทอรีย่อยไม่รวม/var/www/uploadsไดเรกทอรีและไดเรกทอรีย่อยสามารถแทนที่คำสั่งทุกชนิดได้

แต่/var/www/uploadsและไดเรกทอรีย่อยสามารถใช้.htaccessไฟล์เพื่อแทนที่Allow, DenyและOrderคำสั่งเท่านั้น

หมายเหตุ: ในฐานะของ Apache 2.4 (ซึ่งสามารถใช้ได้โดยเริ่มต้นใน 13.10+) Allow, Denyและคำสั่งถูกแทนที่ด้วยคำสั่งเดียวชื่อOrderRequire


39

ก่อนอื่นให้เปิดใช้งานเขียนซ้ำโดยใช้คำสั่งนี้:

sudo a2enmod rewrite

จากนั้นรีสตาร์ท apache2:

sudo service apache2 restart

จากนั้นไปที่sites-availableโฟลเดอร์:

/etc/apache2/sites-available

แก้ไขไฟล์ชื่อdefaultและการเปลี่ยนแปลงไปAllowOverride none AllowOverride Allมีสองบรรทัดที่ต้องทำการเปลี่ยนแปลงนี้

สิ่งนี้จะ.htaccessทำงานในเซิร์ฟเวอร์ VPS ของคุณ

สิ่งนี้ใช้ได้กับ Ubuntu 12.04.5 VPS


3
ไม่มีไฟล์ชื่อ default - แต่มีไฟล์ชื่อ 000-default.conf
Tahir Yasin

1
+1 สำหรับการเตือนให้เปิดใช้งานการเขียนใหม่ฉันพลาดสิ่งนี้ไปและไม่สามารถระบุได้ว่าทำไมมันไม่ทำงานหลังจากทำทุกสิ่ง
Abdul Mannan

ความคิดเห็นนี้อ้างถึงการกำหนดค่าของ Apache 2.2 ไม่ใช่ 2.4 ใน 2.4 defaultไฟล์นี้ถูกเรียกใช้ 000-default.confและไม่มีAllowOverride Noneบรรทัด
ben_nuttall

ไฟล์นี้เป็น000-default.confและไม่สามารถเพิ่มได้AllowOverride Noneที่นี่หากคุณโหลด apache ให้ข้อผิดพลาดอีกครั้ง
Kreker

หากสิ่งที่คุณต้องการก็คือการอนุญาตให้สั่ง mod_rewrite เพื่อจะถูกแทนที่ใน.htaccess, AllowOverride FileInfoดีกว่าที่จะใช้ แม้ว่า FileInfo จะมีชุดคำสั่งจำนวนมากอยู่แล้ว แต่คุณยังคง จำกัด การสั่งการจำนวนมากจากการถูกแทนที่
ด่าน

3

ในกรณีของฉันมันทำงานเช่นนี้:
ฉันต้องเพิ่มบรรทัดต่อไปนี้:

Order allow, deny
Allow from all

ดังนั้นดูเหมือนว่านี้:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

แม้ว่าสิ่งนี้อาจแก้ไขปัญหาของคุณได้ แต่ก็ไม่เกี่ยวข้องกับคำถามที่ OP มี การสั่งซื้อและอนุญาตคำสั่งเป็นคำสั่งใน apache2.2 และก่อนหน้า พวกเขาจะใช้เพื่ออนุญาต / ปฏิเสธการเข้าถึงผู้ใช้ในบางไดเรกทอรี พวกเขาไม่มีผลกระทบใด ๆ กับว่าคำสั่งในไฟล์. htaccess จะถูกแยกวิเคราะห์หรือไม่
Dan

2

นี่เป็นตัวอย่างวิธีการเปิดใช้งาน htaccess ใน Apache 2.4 โดยไม่มีการเปลี่ยนแปลงการกำหนดค่าเริ่มต้น:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

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