0

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

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

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

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

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

4

4 回答 4

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,这意味着 theRequire valid-user或 theAllow都足够好。该变量norequire_auth仅在 URI 为 时设置/Front.php。如果需要,您可以通过包含其他SetEnvIfNoCase指令来添加其他列入白名单的 URI。

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

include如果您通过 a或包含它们,它不会阻止脚本运行require。但是,如果您直接从 的 HTML 内容链接到它们Front.php,则会弹出 Front.php 的登录对话框。

于 2012-10-12T19:22:03.060 回答
1

您说您不希望能够输入其他脚本,但是您向其中添加了身份验证。

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

管理脚本可以很容易地移动到一个子目录中,您可以在其中添加来自 .htaccess 的身份验证。如果您想为某些文件添加身份验证,但不是全部,您还可以选择从 PHP 脚本发送所需的标头。

您经常会在文件开头看到这样的检查:

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

在入口页面(index.php、front.php 等)中,您可以添加以下行:

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

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

于 2012-10-12T19:13:05.273 回答
0

使用此规则集:

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

<Files "Front.php">
allow from all
</Files>
于 2012-10-12T19:10:50.463 回答
0

使用此 .htaccess 内容来防止人们请求除 front.php 之外的任何内容:

RewriteEngine On

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

现在只有 fron.php 可供访问您的 apache 的任何人使用。

顺便说一句-据我所知-您可以强制 Apache 对特定目录中的任何内容进行身份验证,但不能对单个文件进行身份验证。

于 2012-10-12T19:32:20.423 回答