0

私が抱えている問題があり、それを解決する方法について頭を悩ませています:

ルートフォルダーには、次のルールを持つ 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]

そして、うまくいきません。次は機能しますが、 my の目的を無効にします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>

in .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);
4

1 に答える 1