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);
1 ответ
Ты можешь попробовать:
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]
ДОКУМЕНТ / папка /.htaccess: с дополнительным RewriteEngine On
линия:
RewriteEngine On
AuthUserFile / path / to / htpasswd AuthName EnterPassword AuthType Basic требуется пользователь adminUserName