用户进入我的网站并到达主页,他/她应该始终只在主页上。所有其他文件都是由主页运行的脚本,但用户永远不应该导航到它们。所以这是我的目录布局:
他们将到达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 文件?
答案 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-user
或Allow
足够好。变量norequire_auth
仅在URI为/Front.php
时设置。如果需要,您可以通过添加其他SetEnvIfNoCase
指令来添加其他列入白名单的URI。
此外,此身份验证是否会阻止脚本运行,还是仅阻止用户通过URL导航到该文件?
如果您通过include
或require
添加脚本,则不会阻止脚本运行。但是,如果从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验证特定目录中的任何内容,但不能识别单个文件。