htaccess RewriteCond需要用户

时间:2013-10-31 15:28:22

标签: php .htaccess mod-rewrite mod-auth

我遇到了一个问题,我正在努力解决问题:

在根文件夹中我有一个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

但是,如果我已经过身份验证(通过禁用上面的重写,登录,然后重新重新启用重写),它可以工作......

我在上面的规则之前尝试将以下内容添加到我的root 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>
<{1>}中的

(对于PHP-FPM,如果您使用它):

.user.ini

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

1 个答案:

答案 0 :(得分:0)

您可以尝试:

<强> 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]

DOCUEMENT / folder / .htaccess:使用额外的RewriteEngine On行:

RewriteEngine On

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