htaccess переписать и авторизовать конфликт - PullRequest
3 голосов
/ 29 октября 2009

У меня есть 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 ]

7 голосов
/ 12 февраля 2011

Насколько я понимаю, ошибка «404» возникает из-за того, что Apache не может найти страницу «Требуется аутентификация 401». Поэтому я просто решил эту проблему, создав html / 401.html и добавив

ErrorDocument 401 /401.html

на мой html / .htaccess

Подсказка взята из http://drupal.org/node/52465#comment-106353

1 голос
/ 27 ноября 2013

Если ничего из вышеперечисленного не подходит для вашего сценария, базовую аутентификацию также можно выполнить с помощью сценария 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;
};

?>
1 голос
/ 29 октября 2009

Я думаю, вы могли иметь в виду это для своего регулярного выражения:

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

Работает ли html/exported/exported/ в вашей текущей настройке случайно?

0 голосов
/ 29 октября 2009

Если вам не нужна перезапись в / html / exported /, почему бы просто не отключить механизм перезаписи в этой папке: Перезаписать двигатель выключен

...