htaccess từ chối cấp độ gốc theo mặc định, cho phép đường dẫn con ảo regex duy nhất

Jul 19 2019

Tôi muốn từ chối tất cả người dùng ẩn danh theo mặc định nhưng cho phép người dùng ẩn danh theo một đường dẫn ảo cụ thể; đường dẫn ảo được tạo bởi wordpress htaccess + php

Thiết lập hiện tại

AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
Order Deny,Allow
Deny from All

<If "%{REQUEST_URI} =~ m#/sites/dawna/wordpress/wp-json/wp/v2/.*#">
        Order Allow,Deny
        Allow from All
        Satisfy Any
</If>

Satisfy Any

Vấn đề

Đoạn mã trên từ chối tất cả người dùng và yêu cầu thông tin xác thực. Tuy nhiên, nếu tôi chuyển toàn cầu sang Allow from AllIfđến Deny from Allthì điều này hoạt động như mong đợi, chỉ từ chối tuyến đường được chỉ định

Câu hỏi

Làm cách nào để cho phép khách truy cập ẩn danh vào tuyến đường ảo của tôi trong khi vẫn bảo vệ mọi thứ khác bằng mật khẩu?

Trả lời

MrWhite Jul 19 2019 at 19:20

Theo cách hiểu của nó, bạn chỉ cần yêu cầu xác thực nếu đường dẫn URL được yêu cầu không phải là đường dẫn URL mà bạn muốn cho phép truy cập công khai. Và chỉ cần cho phép truy cập nếu không.

Bạn cũng đang trộn các chỉ thị xác thực của Apache 2.2 trên những gì có vẻ là một hệ thống Apache 2.4.

Thay vào đó, hãy thử một cái gì đó như sau:

<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
    AuthUserFile /var/www/domains/dev/.htpasswd
    AuthType Basic
    AuthName "Password Required"
    Require user jackson dawna
</If>

Ở trên kiểm tra xem URL được yêu cầu không bắt đầu /this/urlpath/is/public/(bạn đã thiếu một ký tự bắt đầu của chuỗi ^trong ví dụ của mình) và chỉ nhắc xác thực nếu nó không bắt đầu. Hành động mặc định sau đó là cho phép truy cập (đối với bất kỳ URL nào bắt đầu bằng đường dẫn URL đó).

Jacksonkr Jul 20 2019 at 02:54

Do bản chất của đường dẫn ảo (được tạo bởi wordpress), tôi đã phải sử dụng THE_REQUESTthay thế:

<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
        Allow from All
        Satisfy Any
</If>

Chuyển hướng wordpress sử dụng wordpress/index.phpvì vậy việc sử dụng REQUEST_URIkhông hoạt động bởi vì uri luôn /path/to/wordpress/index.phplàm cho câu lệnh if của tôi trở nên vô dụng.

GHI CHÚ

Nếu bạn cần hỗ trợ PUT hoặc cái khác, bạn sẽ phải thêm cái đó vào. [A-Z]{3}Hoặc [A-Z]{3-6}cái sau sẽ mở ra cho mọi thứ.