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 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
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_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.