[重编辑]
我目前通过以下方式使用.htaccess文件进行访问限制:AuthName; AuthUserFile和AuthGroup指令。
我希望有一个受htaccess保护的'用户重定向'页面,当提示输入登录凭据时,会通过.htaccess文件重定向到用户区域。每个用户区域在其自己的目录中包含不同的内容,因此我需要将用户名重写到URL的末尾。
例如:
来自:
https:// www.domain.com/index.html
致:
https:// www.domain.com/{user1}/index.html for user1
或者:
https:// www.domain.com/{user2}/index.html for user2
到目前为止,这是我通过推断混杂在一起的最佳方式:
RewriteEngine on
RewriteCond $1!^user1/
RewriteCond %{REMOTE_USER} ^user1$ [NC]
RewriteRule (.*) https:// www.domain.com/user1/$1 [L]
RewriteCond $1!^user2/
RewriteCond %{REMOTE_USER} ^user2$ [NC]
RewriteRule (.*) https:// www.domain.com/user2/$1 [L]
或可能
RewriteEngine On
RewriteCond %{REQUEST_URI} !/.+/
RewriteCond %{REMOTE_USER} (.+)
RewriteRule (.*) /%1/$1 [L,R=302]
是正确的和/或有更好的方法吗?最好不要为每个用户添加行
注意/编辑:Php目前对我来说有点复杂。关于php的查询现已删除。
干杯。
答案 0 :(得分:0)
这是一个非常(我的意思是非常)基本(和截断)登录情况的一般工作流程。如果你不了解PHP(这听起来你不是这样),那么你自己就不可能做到这一点,因为“我认为 - 我会采取一个破解这个”的计划。您可能想尝试像Wordpress这样的现成解决方案。
<强>的login.php 强>
<html>
<head>
<title>Login page</title>
</head>
<body>
<form method="POST" action="process.php">
User: <input type="text" name="username" value="" />
Pass: <input type="password" name="password" value="" />
<input type="submit" name="login" value="Login" />
</form>
</body>
</html>
<强> process.php 强>
session_start();
// Add whatever your database connection is...this is a PDO example...
include_once('database.config.php');
if(isset($_POST['username'])) {
// absurdly-simplified validation...
$username = (!empty($_POST['username']))? $_POST['username']:false;
$password = (!empty($_POST['password']))? $_POST['password']:false;
// If validate input is good
if($username != false && $password != false) {
// Encrypt password however it's stored in your db
$password = whatever_encrypt_thing($password);
// Do a call to your database
$query = $con->prepare("select * from users where username = :username and password = :password");
$query->execute(array(':username'=>$username,':password'=>$password));
// etc...do code to validate user and assign $_SESSION stuff.
// Lets pretend $valid is the final return...
if($valid == true)
// Redirect to success page where each user gets their links
header('Location: success.php');
// Stop script from further processing.
exit;
}
}
// Redirect to login
header('Location: login.php?error=login');
答案 1 :(得分:0)
您通常不希望使用表单的action = ""
方法来重定向用户。 action方法用于决定表单的值(存储在$ _POST或$ _GET数组中,具体取决于您的表单的方法)的位置,以便进行验证,处理或其他任何您想要使用它的方法。如果您的代码需要,验证,处理或其他任何您想要使用的页面将保留重定向请求(通常使用header()
函数)。 @Rasclatt发布了一个很好的代码示例。
为了给你另一个例子,这是代码看起来如何的伪代码版本。 @ Rasclatt的答案在您对数据库的处理方面更加详细。类似于他的函数将用于下面的userHasRegisteredEmail()
和userHasMatchingPasswords()
函数。以下是允许用户通过将脚本发送回包含表单的页面进行登录的表单。
<?php
session_start();
$servername = "localhost";
$username = "username";
$password = "password";
//Connect to database
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception only for development mode
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
//Checks the $_POST array to see if it contains 'submit'. If so, you know the form was submitted
if (isset($_POST['submit'])) {
//Declare variables and reset Form Values
$email = $password = null;
//Store form values. Trim() is used to erase excess whitespace in form values.
$email = trim($_POST['email']);
$password = trim($_POST['password']);
//You can add some validation here if you'd like.
//Process Form Values
if (userHasRegisteredEmail() && userHasMatchingPassword()) {
logUserIn();
header('location: user-profile.php'); //REDIRECT USER TO PROFILE PAGE
exit(); //Ensures that the rest of the script isn't run after redirection
} else {
showUserLogInError();
}
}
?>
<html>
<head>
<title>Login page</title>
</head>
<body>
//Leaving form's action empty, i.e. action="", will send the form values back to the current page
<form method="POST" action="">
User: <input type="text" name="username" value="" />
Pass: <input type="password" name="password" value="" />
<input type="submit" name="login" value="Login" />
</form>
</body>
</html>
我希望这会有所帮助。此外,像这样的东西是轻而易举的PHP和PHPAcademy's youtube videos有一些很棒的教程。我希望这有帮助。干杯