密码保护Web目录和文件

时间:2012-10-12 19:08:11

标签: php html .htaccess authentication .htpasswd

用户进入我的网站并到达主页,他/她应该始终只在主页上。所有其他文件都是由主页运行的脚本,但用户永远不应该导航到它们。所以这是我的目录布局:
Directory

他们将到达Front.php并且始终留在Front。所以我创建了一个包含以下代码的htaccess文件:

DirectoryIndex Front.php index.html
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd
Require valid-user

目前,一切需要身份验证。但我希望除 Front.php之外的所有都要求身份验证。如何从身份验证中排除Front.php?

此外,此身份验证是否会阻止脚本运行,还是仅阻止用户通过URL导航 TO 文件?

4 个答案:

答案 0 :(得分:2)

  

现在,一切都需要身份验证。但我希望除Front.php之外的所有内容都要求身份验证。如何从身份验证中排除Front.php?

尝试:

SetEnvIfNoCase Request_URI ^/Front.php norequire_auth=true

# Auth stuff
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd

# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is set
Allow from env=norequire_auth

这会使用Satisfy指令并将其设置为 any ,这意味着Require valid-userAllow足够好。变量norequire_auth仅在URI为/Front.php时设置。如果需要,您可以通过添加其他SetEnvIfNoCase指令来添加其他列入白名单的URI。

  

此外,此身份验证是否会阻止脚本运行,还是仅阻止用户通过URL导航到该文件?

如果您通过includerequire添加脚本,则不会阻止脚本运行。但是,如果Front.php的HTML内容直接链接,则会弹出Front.php的登录对话框。

答案 1 :(得分:1)

您说您不希望能够输入其他脚本,但您需要为其添加身份验证。

如果您不想直接执行这些脚本,最好将它们移出public_html文件夹,这样就无法从外部访问它们。你仍然可以在front.php中包含/要求它们。

可以轻松地将管理脚本移动到可以从.htaccess添加身份验证的子目录。如果要为某些文件添加身份验证,但不是全部,则还可以选择从PHP脚本发送所需的标头。

您经常会在文件开头看到这样的支票:

defined('MYAPPDEFINE') || die('No direct access allowed');

在输入页面(index.php,front.php,无论如何)中,您可以添加以下行:

define('MYAPPDEFINE', 'Whatever value');

这样,直接调用的每个文件都会立即死掉并终止,但是当它从front.php中包含时,检查成功并包含文件。

答案 2 :(得分:0)

使用此规则集:

<Filesmatch "^((?!Front\.php).)*$">
AuthType Basic
AuthName "Login"
AuthUserFile /disks/*/*/*/.htpasswd
Require valid-user
</Filesmatch>

<Files "Front.php">
allow from all
</Files>

答案 3 :(得分:0)

使用此.htaccess内容可阻止人们请求除front.php以外的任何内容:

RewriteEngine On

RewriteCond %{THE_REQUEST} !front.php [NC]
RewriteRule .* - [F,L]

现在只有访问你apache的人才能使用fron.php。

BTW - 据我所知 - 您可以强制Apache验证特定目录中的任何内容,但不能识别单个文件。