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

Другие вопросы по тегам