htaccess menyangkal induk secara default, mengizinkan sub jalur virtual regex tunggal
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 All
dan If
ke Deny from All
maka 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
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).
Karena sifat dari jalur virtual (dibuat oleh wordpress) saya harus menggunakan THE_REQUEST
sebagai gantinya:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
Pengalihan wordpress menggunakan wordpress/index.php
jadi menggunakan REQUEST_URI
tidak berfungsi karena uri selalu /path/to/wordpress/index.php
membuat 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.