ปฏิเสธรายการไดเรกทอรีด้วย htaccess


103

ฉันมีโฟลเดอร์ตัวอย่างเช่น: /public_html/Davood/ และโฟลเดอร์ย่อยจำนวนมากในโฟลเดอร์ตัวอย่างเช่น: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/...

ฉันต้องการเพิ่มไฟล์ htaccess ใน/public_html/Davood/การปฏิเสธ DirectoryListing ใน/Davoodและโฟลเดอร์ย่อยเป็นไปได้ไหม


4
ฉันไม่เห็นว่าทำไมถึงOptions All -Indexesไม่เป็นไปตามคำตอบเพียงไม่กี่คำ!
Fr0zenFyr

1
@ Fr0zenFyr มันขึ้นอยู่กับการกำหนดค่าเว็บเซิร์ฟเวอร์ถ้าใช้AllowOverride Allงานได้
DJafari

คำตอบ:


124

ตัวเลือก -Indexesควรทำงานเพื่อป้องกันรายการไดเรกทอรี

หากคุณกำลังใช้ไฟล์ทำให้ .htaccess แน่ใจว่าคุณมีอย่างน้อย "ตัวเลือก AllowOverride" การตั้งค่าในหลักของคุณไฟล์ Apache การตั้งค่า


1
สิ่งนี้ไม่เปลี่ยนแปลงอะไรเลย
minhajul

70

ลองเพิ่มสิ่งนี้ลงใน.htaccessไฟล์ในไดเร็กทอรีนั้น

Options -Indexes

นี้มีข้อมูลเพิ่มเติม


ใช่ฉันคิดว่า -Indexes ปิดการใช้งานรายการไดเรกทอรี แต่จะบล็อกเนื้อหาทั้งหมดจากโฟลเดอร์ ... มีใครรู้บ้างว่าทำไม?
Michael Fever

ทั้งหมดที่ฉันคิดได้คือมีปัญหากับการกำหนดค่าเซิร์ฟเวอร์ ลองเปิดใช้งานโมดูลและไดเรกทอรีการตั้งค่าrewrite AllowOverride Allถ้าทุกอย่างมีอยู่แล้วและสิ่งที่คุณแสดงความคิดเห็นเป็นความจริงฉันคงโชคดีเกินไปที่ได้Options All -Indexesทำงานในทุกโปรเจ็กต์บนเซิร์ฟเวอร์ที่แตกต่างกัน
Fr0zenFyr

35

หากOptions -Indexesไม่ได้ผลตามที่ Bryan Drewery แนะนำคุณสามารถเขียนวิธีการเรียกซ้ำเพื่อสร้างไฟล์ index.php เปล่า

วางสิ่งนี้ไว้ในโฟลเดอร์ฐานที่คุณต้องการปกป้องคุณสามารถตั้งชื่ออะไรก็ได้ (ฉันขอแนะนำ index.php)

<?php

recurse(".");

function recurse($path){
    foreach(scandir($path) as $o){
        if($o != "." && $o != ".."){
            $full = $path . "/" . $o;
            if(is_dir($full)){
                if(!file_exists($full . "/index.php")){
                    file_put_contents($full . "/index.php", "");
                }
                recurse($full);
            }
        }
    }
}

?>

ไฟล์ index.php เปล่าเหล่านี้สามารถลบหรือเขียนทับได้อย่างง่ายดายและจะทำให้ไดเรกทอรีของคุณไม่อยู่ในรายการ


8
แม้ว่าไฟล์เปล่าจะไม่ใช่เรื่องใหญ่ แต่วิธีแก้ปัญหาที่ดีกว่าคือการใช้ลิงก์สัญลักษณ์วิธีนี้จะช่วยประหยัดพื้นที่เล็กน้อยและเขาจะต้องแก้ไขไฟล์ 1 ไฟล์เท่านั้นหากเขาเลือกที่จะแสดงข้อความที่เหมือนกัน แทนที่จะเป็นหน้าว่าง
daalbert

19

สำหรับการแสดงข้อผิดพลาดที่ต้องห้ามให้รวมบรรทัดเหล่านี้ในไฟล์. htaccess ของคุณ:

Options -Indexes 

หากเราต้องการจัดทำดัชนีไฟล์ของเราและแสดงข้อมูลบางอย่างให้ใช้:

IndexOptions -FancyIndexing

หากเราต้องการไม่ให้ส่วนขยายบางรายการแสดงให้ทำดังนี้

IndexIgnore *.zip *.css

1
.httaccessหรือ.htaccess?
NaveenDA

8

ตัวเลือก -Indexes เหมาะสำหรับฉัน

นี่คือ.htaccessไฟล์:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes <---- This Works for Me :)
    </IfModule>


   ....etc stuff

</IfModule>

ก่อน: ใส่คำอธิบายภาพที่นี่

หลังจาก:

ใส่คำอธิบายภาพที่นี่



3
Options -Indexes

ฉันต้องลองสร้างไฟล์. htaccess ที่ไดเร็กทอรีปัจจุบันที่ฉันต้องการไม่อนุญาตรายการดัชนีไดเร็กทอรี แต่ขอโทษฉันไม่รู้เกี่ยวกับการเรียกซ้ำในรหัส. htaccess

ลองมัน.


2

เห็นด้วย

Options -Indexes

ควรใช้งานได้หากเซิร์ฟเวอร์หลักได้รับการกำหนดค่าให้อนุญาตให้มีการแทนที่ตัวเลือก แต่หากไม่เป็นเช่นนั้นการดำเนินการนี้จะซ่อนไฟล์ทั้งหมดจากรายการ (ดังนั้นทุกไดเรกทอรีจะว่างเปล่า):

IndexIgnore *

2

ตัวเลือก -Indexesส่งกลับข้อผิดพลาดที่ต้องห้าม 403 สำหรับไดเร็กทอรีที่มีการป้องกัน พฤติกรรมเดียวกันสามารถทำได้โดยใช้ Redirect ต่อไปนี้ใน htaccess:

RedirectMatch 403 ^/folder/?$ 

นี้จะกลับข้อผิดพลาดสิ่งต้องห้ามสำหรับexample.com/folder/

คุณยังสามารถใช้ mod-rewrite เพื่อห้ามการร้องขอโฟลเดอร์

RewriteEngine on

RewriteRule ^folder/?$ - [F]

หาก htaccess ของคุณอยู่ในโฟลเดอร์ที่คุณจะไปห้ามการเปลี่ยนแปลงรูปแบบ RewriteRule จาก^ โฟลเดอร์ /? $เพื่อ^ $

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