我有一个index.php页面,我有一个菜单:这个菜单不同取决于我是否记录。
到现在为止,我已经创建了两个文件html:" logged-menu-html"和" not-logged-menu.html",然后在index.php我用php写的东西如下:
" if(已记录)包含(logged-menu.html),否则包括(not-logged-menu.html)"
第一个问题(我只是curius)..加载正确的菜单是否正确?或者必须避免?
现在,回答我真正的问题:我希望这两个文件.html是"私有",这意味着如果不是通过index.php就无法加载它们!
到目前为止,我只有一个解决方案:当我通过FileZilla连接到我的服务器(它来自我的大学)时,我有一个文件夹public_html,我必须放置我希望在线可用的文件。
我发现的解决方案是为public_html创建一个兄弟文件夹:这样我就不能使用符号" ../ privatefile / * .html" (如果index.php在public_html中),但用户无法访问该文件夹。
这个解决方案好吗?还是一定要避免? :)
谢谢!
答案 0 :(得分:1)
如果您正在使用Apache - 版本2.4(导致我目前正在使用的)
您可以在任何人访问您的网页之前设置登录信息。
转到Apache文件夹> bin> htpasswd - 从终端打开htpasswd
如果这是您第一次创建密码文件:
htpasswd -c /dir username
然后输入用户的密码。
否则,如果您之前创建过密码文件,只需删除-c
标记。
然后,在您的.htaccess
文件中,键入以下内容:
AuthType Basic #Type of authentication used
AuthName "This is a private area, please Log In!" #Your Login Text
AuthUserFile "C:\Apache24\Password.txt" #In which your password file is stored.
AuthGroupFile /dev/null
require valid-user
或者,如果您想在httpd.conf
上执行此操作:
<Location "/protected-area">
AuthUserFile "C:\Apache24\Password.txt"
AuthName "This is a private area, please Log In!"
AuthGroupFile /dev/null
AuthType Basic
Require valid-user
</Location>
现在,如果有人访问您的网页,系统会提示他们登录。
您可以设置登录页面以允许访问有效用户。
这与&#34; Auth&#34;不同,因为在这种情况下,您将创建像&#34; Login.php&#34;
这样的文件
首先,将DirectoryIndex
设置为Login.php
,或将任何文件名设置为登录页面。
然后,创建您的登录页面。
在<form>
中,将action
属性设置为:
<?php echo htmlspecialchars($_SERVER[PHP_SELF]); ?>
<head>
部分中的php:
<?php
$err = '';
if (isset($_POST['login']) && !empty($_POST['username']) && !empty($_POST['password'])) {
if ($_POST['username'] == 'user' && $_POST['password'] == '123456') {
$_SESSION['valid'] = true;
$_SESSION['timeout'] = time();
$_SESSION['username'] = 'user';
header('Location: Welcome.php');
} else {
$err = 'Wrong username or password';
}
}
?>
在welcome.php
:
阻止用户访问&#34; Welcome.php&#34;没有登录:
<?php
if(isset($_SESSION['valid']) && $_SESSION['valid'] == true) {
echo "You are logged in!";
} else {
header("Location: Login.php");
}
?>
我不确定这个......
<Directory ~ "\.private">
Order allow,deny
Deny from all
</Directory>
RewriteRule ^(.*/)?\\.private/ - [F,L]
RedirectMatch 404 /\\.private(/|$)