htaccess重写和auth冲突

时间:2009-10-29 04:49:40

标签: .htaccess mod-rewrite

我有2个目录,每个目录都有一个.htaccess文件:

html / .htaccess - 此文件中有重写几乎所有内容都发送到url.php

RewriteCond %{REQUEST_URI} !(exported/?|\.(php|gif|jpe?g|png|css|js|pdf|doc|xml|ico))$
RewriteRule (.*)$ /url.php [L]

和html / exported / .htaccess

AuthType Basic
AuthName "exported"
AuthUserFile "/home/siteuser/.htpasswd"
require valid-user

如果我删除html / exported / .htaccess,重写工作正常,导出的目录可以访问。如果我删除html / .htaccess,验证工作正常。

然而,当我将两个.htaccess文件导出/正在被重写为/url.php时。我有什么想法可以阻止它吗?

4 个答案:

答案 0 :(得分:7)

据我所知,发生'404'错误是因为Apache无法找到'401 Authentication Needed'页面。所以我只是通过创建html / 401.html并添加

来解决它

ErrorDocument 401 /401.html

到我的html / .htaccess

提示取自http://drupal.org/node/52465#comment-106353

答案 1 :(得分:1)

我认为你的正则表达可能意味着这个:

RewriteCond %{REQUEST_URI} !(^exported/?|\.(php|gif|jpe?g|png|css|js|pdf|doc|xml|ico)$)
RewriteRule (.*)$ /url.php [L]

html/exported/exported/是否可以在您当前的设置中运行?

答案 2 :(得分:1)

如果以上都不适合您的方案,也可以使用php脚本

完成基本身份验证
<?php
session_start();
if (isset($_SESSION['newlogin'])) { 
unset($_SESSION['newlogin']);
unset($_SESSION['loggedout']);
};
$valid_passwords = array ("admin" => "mypass");
$valid_apasswords = array ("admin" => "mypass");
$valid_users = array_keys($valid_passwords);
$valid_admin = array_keys($valid_apasswords);

$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];

$avalidated = (in_array($user, $valid_admin)) && ($pass == $valid_apasswords[$user]);
$uvalidated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
$validated = (($uvalidated == true) || ($avalidated == true)) ;

if (!$validated || isset($_SESSION['loggedout'])) {
        $_SESSION['newlogin'] = true;
        header('WWW-Authenticate: Basic realm="Login Area"');
        header('HTTP/1.0 401 Unauthorized');
        ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<div id="messagebox">Authorisation Required.</div>
</body>
</html>
        <?php
        exit;
};

?>

答案 3 :(得分:0)

如果您不需要在/ html / exported /中进行任何重写,为什么不关闭该文件夹中的重写引擎: RewriteEngine Off