Tim*_*mer 1 html php mysql .htaccess redirect
SO社区晚上好,
我最近在做一个网络项目,遇到了一个有趣的问题,我在互联网上进行了搜索,但无法解决它。这是发生的事情。
当用户访问该网站时,它会自动将他们引导至登录页面。他们只需输入用户名和密码,然后单击登录按钮/链接(或按 Enter 键),它将向 SQL Server 发送请求以验证密码,然后登录用户,为用户数据设置会话变量。简单吧?效果太棒了!(没什么可幸灾乐祸的。简单的 PHP/SQL)无论如何,我继续从事这个项目并取得了很大的进展。一直以来,登录系统都运行良好。我每天都必须登录,而且没有出现任何问题。
我决定将文件扩展名从 URL 中删除(website.com/index.html 改为 website.com/index 或 website.com/dashboard.php 改为 website.com/dashboard)。在对该主题进行了一些研究后,我发现可以通过使用 .htaccess 文件和少量代码来相当轻松地完成此操作。我创建了一个 .htaccess 文件并将以下代码放入其中,然后将其上传到我的服务器。我刷新了页面并尝试了几个链接,发现它实际上删除了文件扩展名。我很自豪哈哈!不管怎样,我继续从事这个项目,没有出现任何问题。一天结束时,我注销并关闭了计算机。第二天,我去登录,它说登录时出错(当在 SQL 服务器中找不到用户名/密码组合的匹配项时,我的自定义错误消息)。我又尝试了几次都没有成功。恼怒之下,我登录到控制面板和 SQL 管理器进行检查,以确保信息准确无误。它是。我想到了前一天所做的事情可能会影响登录系统,并将其范围缩小到 .htaccess 文件。我启动了 FTP 并从服务器中删除了该文件,然后尝试使用相同的信息再次登录。你猜怎么了?有效!
前一天处理它时没有引起任何问题,因为每当我上传文件时我就已经登录了。为了让我登录,我必须删除 .htaccess 文件,登录,然后重新上传。我想不通这个。运气好的话,我可能错过了一些简单的事情。请参阅下面的代码,如果您需要更多信息,请告诉我。(希望我涵盖了所有内容。)
.htaccess
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_FILENAME}.html [L]
RewriteCond %{HTTP_HOST} ^subDomain\.website\.com$ [NC]
RewriteRule ^(.*) http://www.subdomain.com/$1 [L,R]
RewriteCond %{HTTP_HOST} ^www.subDomain\.website\.com$ [NC]
RewriteRule ^(.*) http://www.subdomain.com/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)
最后四行代码用于将 URL 的子域重定向到完全不同的域。例如:subdomain.website.com 将重定向到 subdomain.com。
登录.php
<?
session_start();
$_SESSION["LOGGEDIN"] = "FALSE";
$_SESSION["NAME"] = "NULL";
require_once 'myConnectionFile.php';
$uCheck = $_POST['uName'];
$uCheck = strtoupper($uCheck);
$pCheck = $_POST['pWord'];
//echo "Attempting to log in " . $uCheck . "!<br><br>";
//echo "";
$sql = "SELECT id FROM USERNAMES WHERE uName = '$uCheck' and PASSWORDS = '$pCheck'";
// echo $uCheck . " " . $pCheck;
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
// $active = $row['active'];
$count = mysqli_num_rows($result);
if($count == 1) {
//echo "Logged in!<br>";
$_SESSION["LOGGEDIN"] = "TRUE";
$_SESSION["NAME"] = $uCheck;
//echo $_SESSION["LOGGEDIN"];
$sql_SESSION = "SELECT * FROM USERNAMES WHERE uName='$uCheck'";
$result_SESSION = mysqli_query($conn,$sql_SESSION);
if ($result_SESSION->num_rows > 0) {
while($row_SESSION = $result_SESSION->fetch_assoc()) {
$_SESSION["USER"] = $row_SESSION['uName'];
// LOAD SESSION VARIABLES HERE
}
}
header('Location: http://www.website.com/Dashboard.php');
} else {
echo "Error logging in!";
header('Refresh: 3; URL=destroySessions.php');
}
// session_unset(); <- Unsets all session variables.
// session_destroy(); <- Destroys (Removes) a session.
?>
Run Code Online (Sandbox Code Playgroud)
请记住,出于安全目的,我更改了一些信息。
查看代码后,您能看出 .htaccess 文件阻止我/用户登录我的系统的任何原因吗?
任何建议将不胜感激!
提前致谢,
蒂姆
302 和 301 重定向将丢失 POST 数据并变成 GET 请求。一个好的解决方案是使用 307 重定向,因为它在重定向期间仍然是 POST 请求:
RewriteRule ^ %1 [R=307,L,NC]
Run Code Online (Sandbox Code Playgroud)