有我有一個問題,我拉我的頭髮就如何解決它:的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);
這並不在我的情況下工作,因爲如果文件夾沒有索引文件,它會顯示「Forbidden」錯誤頁面,因爲我禁用了文件索引,而是希望它轉到'redirect.php'。另外,我已經嘗試過這一點,但是Apache還沒有確認secureFolder的存在,我還沒有通過身份驗證...... – Populus
你可以從你的兩個.htaccess發佈完整的代碼,因爲我沒有看到任何'禁用索引'指示在這裏。 – anubhava
這是在我的服務器配置'選項所有-Indexes'形式 – Populus