2014-12-06 84 views
0

[重大編輯]Htaccess或html:重定向到一個重寫的URL

我目前有權限使用.htaccess文件通過:AuthName; AuthUserFile和AuthGroup指令。

我希望有一個受htaccess保護的'用戶重定向'頁面,當提示輸入登錄憑據時,通過.htaccess文件啓動重定向到用戶區域。每個用戶區在其自己的目錄中包含不同的內容,因此我需要將用戶名重寫爲url的末尾。

例如:

來自:

的https:// www.domain.com/index.html

到:

https://開頭www.domain.com/{user1}/index.html用戶1

或者:

https://開頭www.domain.com/{user2}/index.html,對於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

這是一個非常(我的意思是非常)基本(和截斷)登錄情況的一般工作流程。如果你不知道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'); 
+0

我同意,這對我來說有點不可能,因爲這是一種「我認爲我會採取的行動」。雖然我得到了腳本正在做什麼的基本概念,但由於我沒有上下文/背景,所以語法目前沒有意義。目前我會有一個真正的戰鬥,也必須使上面的例子database.config.php和外推。我認爲這將不得不被包含在'正在管理中'的'學習'事物中。 – tallywhacker 2014-12-06 09:17:07

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有一些真棒教程。我希望這有幫助。乾杯

+0

似乎你編輯的問題,因爲我發佈的答案。對不起,如果它不再有幫助。 – wheresmyspaceship 2014-12-06 11:44:49

+0

這絕對有幫助。我最初的問題已被修改,所以我可以實施一個解決方案,直到我可以把時間放在學習使用PHP。我打算在未來讓我的頭部圍繞php和mysql,這將是有用的參考!感謝您花時間,這不是浪費。 :) – tallywhacker 2014-12-06 11:54:48