Điểm:1

Cấm mọi thứ ngoại trừ các tập lệnh nằm trên các thư mục con

lá cờ gr

Tôi muốn cấm mọi thứ xuất hiện trên một miền cụ thể (ví dụ: ví dụ.com) ngoại trừ một số điểm vào (ở đây, các tệp PHP) nằm trên một đường dẫn cụ thể (ví dụ: example.com/subfolder1/subfolder2/script.php).

Đây là một đoạn cấu hình mà tôi đã sử dụng trong máy chủ ảo của mình cho miền cụ thể này. Tôi vẫn nhận được 403 cho mọi thứ.

Đối với ngữ cảnh, tôi đang sử dụng Apache 2.4.41 + FPM 7.2

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /my/path
  <Directory /my/path>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
    RewriteRule . - [F,L]
  </Directory>
</VirtualHost>
Điểm:0
lá cờ kz
RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2$
Quy tắc viết lại . - [F,L]

Vì neo cuối chuỗi ($) điều này chỉ cho phép /thư mục con1/thư mục con2 chính xác (không /thư mục con1/thư mục con2/script.php) và chặn mọi thứ khác. Từ /thư mục con1/thư mục con2 có lẽ là một thư mục vật lý thì mod_dir sẽ chuyển hướng để nối thêm dấu gạch chéo, sau đó sẽ bị chặn bởi quy tắc này. Vì vậy, có, nó chặn mọi thứ.

Bạn cần xóa neo cuối chuỗi ($) từ cuối của CondPattern. Ví dụ:

RewriteCond %{REQUEST_URI} !^/subfolder1/subfolder2

Mặc dù, nói đúng ra, để tránh xung đột với bất cứ thứ gì có thể đơn giản bắt đầu bằng thư mục con2 (ví dụ. thư mục con2foo.php) thì bạn nên sử dụng biểu thức chính quy như ^/subfolder1/subfolder2($|/) thay thế.

Lưu ý rằng nếu đây là đường dẫn URL duy nhất bạn cần cho phép thì bạn không cần điều kiện, tình trạng, trạng thái, vì thử nghiệm nên được thực hiện trong viết lại quy tắc chỉ thị trực tiếp. Ví dụ:

RewriteRule !^/subfolder1/subfolder2($|/) - [F]

Các l cờ không bắt buộc với F lá cờ; nó được ngụ ý.


Ngoài ra, hoàn toàn không sử dụng mod_rewrite. Ví dụ:

  <Directory /my/path>
    Require all denied
  </Directory>
  <Directory /my/path/subfolder1/subfolder2>
    Require all granted
  </Directory>

Điều này tốt hơn mod_rewrite, trừ khi bạn có các yêu cầu khác.

lá cờ gr
Cảm ơn rất nhiều ! Làm thế nào tôi có thể không nghĩ về giải pháp cuối cùng của bạn? đơn giản quá :D
lá cờ kz
@alxsbn Vì bạn đã đề cập đến "thư mục con**s**" nên không rõ liệu giải pháp cuối cùng có hoạt động ngoài ví dụ giới hạn của bạn hay không. Mặc dù bạn luôn có thể sử dụng `` và biểu thức chính quy nếu bạn có nhiều thư mục con.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.