如何在 Apache 實例上針對特定 REQUEST_URI 停用 HTTP 基本驗證

如何在 Apache 實例上針對特定 REQUEST_URI 停用 HTTP 基本驗證

我有一個託管 WordPress 網站的 Linux 實例,並且它為整個網站啟用了基本 HTTP 驗證。我現在想要停用我們可以呼叫的特定路徑的基本 HTTP 驗證/auth-free-url-2019

我的第一個想法是在文件中設定一個 ENV 變量,.htaccess如下所示:

SetEnvIf REQUEST_URI "^/auth-free-url-2019" allowed_page=1

然後將以下內容新增到我的身份驗證中

AuthUserFile SOME_AUTH_FILE
AuthName "AUTH NAME"
AuthType Basic
Order deny,allow
Deny from all
Satisfy Any
Require valid-user
Allow from all

這不起作用,我讀到了一些有關 mod_rewrite 可能與環境變數衝突的內容,因此我決定透過<If>在 .htaccess 檔案中新增指令來嘗試更簡單的方法,如下所示:

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

這也不起作用,我添加了 aHeader set以查看 的值REQUEST_URI,它似乎是正確的。

<If>我嘗試過的指令中

"%{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}"

只有最後一個會關閉基本身份驗證。我不確定問題是什麼,但由於某種原因,我與 REQUEST_URI 值進行比較的嘗試不起作用。我已經嘗試了相同的<If>指令區塊,但對於 HOST_NAME 來說,這似乎有效,因此它與 REQUEST_URI 有關。

任何幫助,將不勝感激。

阿帕契2.4.37

RHEL

這是我的 .htaccess 文件

# 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>

相關內容