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]

它不起作用;以下作品,但它违背了我的目的redirect.php

RewriteRule ^(.*)$ - [L]

欢迎任何想法!

更新:美国东部时间 2013 年 10 月 31 日 14:00

好吧,我已经给出了使用 HTTP auth 处理它的方法。所以我使用 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

0

你可以试试:

文档/.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/folder/.htaccess:RewriteEngine On一行:

重写引擎开启

AuthUserFile /path/to/htpasswd AuthName EnterPassword AuthType Basic 需要用户 adminUserName

于 2013-10-31T17:02:03.100 回答