2013-10-31 61 views
0

有我有一個問題,我拉我的頭髮就如何解決它:的htaccess的RewriteCond要求用戶

在根文件夾中我有以下規則htaccess文件:

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME}/index.php !-s 
RewriteCond %{REQUEST_FILENAME}/index.html !-s 
RewriteCond %{REQUEST_FILENAME}/index.htm !-s 
RewriteRule ^(.*)$ redirect.php [QSA] 

所以我的目標是重寫redirect.php如果沒有找到文件/目錄/索引文件。

這工作得很好了我的整個網站,所以沒有問題...直到我有一個受密碼具有以下htaccess文件保護的文件夾:

AuthUserFile /path/to/htpasswd 
AuthName EnterPassword 
AuthType Basic 

require user adminUserName 

看來,Apache的問候去這個文件夾無效並執行重寫爲redirect.php

,如果我已經驗證(通過禁用上面的重寫,登錄,然後重新啓用再次重寫),它的工作原理...

我曾嘗試加入以下到我的根htaccess文件前規則我上面:

RewriteRule ^secureFolder(.*)$ - [L] 

而且它不工作;以下作品,但它打敗了我的目的:redirect.php

RewriteRule ^(.*)$ - [L] 

任何想法歡迎!

更新:2013年10月31日14:00 ET

好了,我已經在使用HTTP認證處理它給出。所以,我只是執行該文件夾使用PHP一個簡單的密碼系統...

它是這樣的:

.htaccess

<IfModule mod_php5.c> 
    php_value auto_prepend_file /path/to/a/file/in/secureFolder 
</IfModule> 

.user.ini(對於PHP-FPM,如果使用它):

auto_prepend_file = /path/to/a/file/in/secureFolder 

/path/to/a/file/in/secureFolder

session_start(); 
/** 
* Check if logged in 
*/ 
if (!isset($_SESSION['adminLogin'])) { 
    include('/path/to/loginTemplate'); 
    exit; 
} 

/path/to/loginTemplate

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $username = isset($_POST['username']) ? $_POST['username'] : null; 
    $password = isset($_POST['password']) ? $_POST['password'] : null; 
    if (
     $username == 'username' 
     && sha1($password) == 'somehashedvalueofyourpassword' 
    ) { 
     $_SESSION['adminLogin'] = true; 
     header('refresh: 0'); 
    } else { 
     $message = 'Incorrect login'; 
    } 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Login</title> 
</head> 
<body> 
<?php if (isset($message)) echo $message ?> 
<form action="" method="post"> 
    <p> 
     <label>Username:</label> 
     <input type="text" name="username" /> 
    </p> 
    <p> 
     <label>Password:</label> 
     <input type="password" name="password" /> 
    </p> 
    <p> 
     <input type="submit" value="Login" /> 
    </p> 
</form> 
</body> 
</html> 

並有logout.php

<?php 
session_start(); 

unset($_SESSION['adminLogin']); 

$location = empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/admin.contests/'; 
header('Location: ' . $location); 

回答

0

你可以試試:

DOCUEMENT /的.htaccess:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME}/index.php !-s 
RewriteCond %{REQUEST_FILENAME}/index.html !-s 
RewriteCond %{REQUEST_FILENAME}/index.htm !-s 
RewriteRule ^(.*)$ redirect.php [L] 

DOCUEMENT /文件夾/。htaccess的:有了一個額外的RewriteEngine On行:

RewriteEngine敘述在

的AuthUserFile /路徑/到/ htpasswd的 AuthName指令EnterPassword 基礎進行AuthType需要 用戶adminUserName

+0

這並不在我的情況下工作,因爲如果文件夾沒有索引文件,它會顯示「Forbidden」錯誤頁面,因爲我禁用了文件索引,而是希望它轉到'redirect.php'。另外,我已經嘗試過這一點,但是Apache還沒有確認secureFolder的存在,我還沒有通過身份驗證...... – Populus

+0

你可以從你的兩個.htaccess發佈完整的代碼,因爲我沒有看到任何'禁用索引'指示在這裏。 – anubhava

+0

這是在我的服務器配置'選項所有-Indexes'形式 – Populus