13

我在开发服务器上有一个基本身份验证设置。它是在我的httpd.conf文件中为网站的 VirtualHost 设置的。我不得不将其设置为排除某些目录,这没有造成任何问题并且一切正常。

问题在于排除了通过我在文件mod_rewrite中的规则的 URL。.htaccess我的设置是让所有 URL 都通过我的index.php文件,并从那里找到并运行相关代码。/businesses/upload_logo我尝试像其他人一样添加我想要排除的 URL ( ),但它仍然需要身份验证。这是我目前拥有的:

...
<Location />
    SetEnvIf Request_URI "/businesses/upload_logo" noauth=1
    SetEnvIf Request_URI "/api/.*" noauth=1

    AuthType Basic
    AuthName "Private"
    AuthUserFile ****
    Require valid-user

    Order deny,allow
    Satisfy any
    Deny from all
    Allow from env=noauth
</Location>
....

我在这里这里发现了与我相似的问题,但答案只给了我已经在尝试的内容。

我也想过其他可能的解决方案,但这些将是最后的手段。我想看看我目前的做法是否可行:

  • 在我的 php 代码中设置基本身份验证
    • 目前太麻烦了
  • 将身份验证放在我的.htaccess文件 中
    • 还不想这样做,因为我只希望在 3 台服务器之一上进行身份验证。我知道我可以使用更多SetEnvIf HOST ...,但我想看看它是否可以先通过这种方式修复。

mod_rewrite规则:

...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L,QSA]
4

3 回答 3

20

尝试添加

Allow from env=REDIRECT_noauth
于 2012-12-23T11:06:58.453 回答
2

对我来说,这样的事情就像一个魅力:

<location />
        SetEnvIf Request_URI "/businesses/upload_logo" REDIRECT_noauth=1
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/passwords/passwords
        Order Deny,Allow
        Satisfy any
        Deny from all
        Allow from env=REDIRECT_noauth
        Require user yournickname
</location>
于 2013-06-21T15:10:32.000 回答
-1

根据您提供的内容,它应该可以工作,除非您的配置中的其他地方有冲突的指令。

我做了一个类似的工作设置,只是我使用了文件系统路径而不是 URI

我在这里添加它,希望你会发现它有用

<VirtualHost *:8989 >
<IfModule mod_auth_basic.c>
 <Directory /var/www/html/vella-8989>
  # the auth block
  AuthType Basic
  AuthName "Please login."
  AuthUserFile /var/www/html/vella-8989/.htpasswd
  require valid-user

  Order Deny,Allow
  Satisfy any
  Deny from all
  Require valid-user
  Allow from env=noauth
</Directory>
</IfModule>
  # set an environtment variable "noauth" if the request has "/callbacks/"
  SetEnvIf Request_URI "/callbacks/" noauth=1
  ServerName vella.com
  ServerSignature off
</VirtualHost>
于 2012-12-21T19:00:58.753 回答