
Ich habe eine Linux-Instanz, die eine WordPress-Site hostet, und für die gesamte Site ist Basic HTTP Auth aktiviert. Ich möchte jetzt Basic HTTP Auth für einen bestimmten Pfad deaktivieren, den wir aufrufen können /auth-free-url-2019
.
.htaccess
Mein erster Gedanke war, eine ENV-Variable in der Datei wie folgt festzulegen :
SetEnvIf REQUEST_URI "^/auth-free-url-2019" allowed_page=1
und dann Folgendes in meine Authentifizierung einfügen
AuthUserFile SOME_AUTH_FILE
AuthName "AUTH NAME"
AuthType Basic
Order deny,allow
Deny from all
Satisfy Any
Require valid-user
Allow from all
Dies funktionierte nicht und ich las, dass mod_rewrite möglicherweise mit den Umgebungsvariablen in Konflikt stehe. Daher beschloss ich, etwas Einfacheres zu versuchen und fügte <If>
meiner .htaccess-Datei die folgende Direktive hinzu:
<If "%{REQUEST_URI} =~ m#auth-free-url-2019#i">
Order allow,deny
Satisfy Any
Allow from all
Deny from none
</If>
<Else>
Header set Checked-Request-url %{REQUEST_URI}e
AuthUserFile SOME_AUTH_FILE
AuthName "AUTH NAME"
AuthType Basic
Order deny,allow
Deny from all
Satisfy Any
Require valid-user
</Else>
Dies funktioniert auch nicht und ich habe ein hinzugefügt, Header set
um den Wert anzuzeigen, REQUEST_URI
und es scheint korrekt zu sein.
In der <If>
Richtlinie habe ich versucht
"%{REQUEST_URI} =~ m#auth-free-url-2019#i"
"%{REQUEST_URI} =~ /\/auth-free-url-2019$/i"
"%{REQUEST_URI} =~ /.*auth-free-url-2019.*/i"
"%{REQUEST_URI} == '/auth-free-url-2019'"
"%{REQUEST_URI} == 'auth-free-url-2019'"
"%{REQUEST_URI} == 'auth-free-url-2019'"
"-n %{REQUEST_URI}"
und nur der letzte schaltet die Basisauthentifizierung aus. Ich bin mir nicht sicher, wo das Problem liegt, aber aus irgendeinem Grund funktionieren meine Versuche, mit dem REQUEST_URI-Wert zu vergleichen, nicht. Ich habe denselben <If>
Direktivenblock ausprobiert, aber für den HOST_NAME, und das scheint zu funktionieren, also hat es etwas mit dem REQUEST_URI zu tun.
Jede Hilfe wäre willkommen.
Apache 2.4.37
RHEL
und hier ist meine .htaccess-Datei
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<If "%{REQUEST_URI} =~ m#auth-free-url-2019#i">
Order allow,deny
Satisfy Any
Allow from all
Deny from none
</If>
<Else>
AuthUserFile SOME_AUTH_FILE
AuthName "AUTH NAME"
AuthType Basic
Order deny,allow
Deny from all
Satisfy Any
Require valid-user
#Allow from all
</Else>
# Exclude the WP CRON and other scripts from authentication
<FilesMatch "(wp-cron.php|another-script.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=W3TC_SSL:_ssl]
RewriteCond %{SERVER_PORT} =443
RewriteRule .* - [E=W3TC_SSL:_ssl]
RewriteCond %{HTTP:X-Forwarded-Proto} =https [NC]
RewriteRule .* - [E=W3TC_SSL:_ssl]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule .* - [E=W3TC_ENC:_gzip]
RewriteCond %{HTTP_COOKIE} w3tc_preview [NC]
RewriteRule .* - [E=W3TC_PREVIEW:_preview]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" -f
RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" [L]
</IfModule>