htaccess menyangkal induk secara default, mengizinkan sub jalur virtual regex tunggal

Jul 19 2019

Saya ingin menolak semua pengguna anonim secara default namun mengizinkan pengguna anonim untuk jalur virtual tertentu; jalur virtual dibuat oleh wordpress htaccess + php

Setup Saat Ini

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

Masalah

Kode di atas menyangkal semua pengguna dan meminta kredensial. Namun jika saya beralih global ke Allow from Alldan Ifke Deny from Allmaka ini berfungsi seperti yang diharapkan, hanya menolak rute yang ditentukan

Pertanyaan

Bagaimana saya bisa mengizinkan pengunjung anonim ke rute virtual saya sambil membuat semua yang lain dilindungi kata sandi?

Jawaban

MrWhite Jul 19 2019 at 19:20

Dengan suara itu Anda hanya perlu meminta otentikasi jika jalur URL yang diminta bukan jalur URL yang ingin Anda izinkan akses publik. Dan cukup izinkan akses sebaliknya.

Anda juga menggabungkan arahan autentikasi Apache 2.2 pada apa yang tampaknya menjadi sistem Apache 2.4.

Cobalah sesuatu seperti berikut ini:

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

Pemeriksaan di atas bahwa URL yang diminta tidak dimulai /this/urlpath/is/public/(Anda kehilangan jangkar awal string ^dalam contoh Anda) dan hanya meminta otentikasi jika tidak. Tindakan default kemudian adalah untuk mengizinkan akses (untuk setiap URL yang dimulai dengan jalur URL itu).

Jacksonkr Jul 20 2019 at 02:54

Karena sifat dari jalur virtual (dibuat oleh wordpress) saya harus menggunakan THE_REQUESTsebagai gantinya:

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

Pengalihan wordpress menggunakan wordpress/index.phpjadi menggunakan REQUEST_URItidak berfungsi karena uri selalu /path/to/wordpress/index.phpmembuat pernyataan if tidak berguna.

CATATAN

Jika Anda perlu mendukung PUT atau lainnya, Anda harus menambahkannya. [A-Z]{3}Atau di [A-Z]{3-6}mana yang terakhir akan terbuka untuk semuanya.