Защита паролем htaccess и перезапись модов? - PullRequest
1 голос
/ 21 мая 2010

Интересно, как я могу решить следующую проблему. в корневом каталоге моего сервера лежит файл calles upload.php

Я хочу иметь возможность добавить «/ upload» (без .php) к моему URL, и браузер должен запросить пароль (и, возможно, имя пользователя, если это возможно). Я правильно ввожу пароль (и имя пользователя) upload.php должен быть открыт.

Возможно ли это с htaccess?

1 Ответ

2 голосов
/ 21 мая 2010

Да, это два разных вопроса.

Сначала: удалите расширение .php

Есть в основном два способа сделать это.

  • Включение согласования содержимого выдает MultiViews . Это позволит вам ссылаться на другие ресурсы без расширения и даже иметь несколько файлов с похожими именами, но с разными расширениями, и позволит Apache выбрать лучший вариант в соответствии с предпочтениями браузера. Смотрите ссылку. Вы можете включить его с помощью Options +MultiViews в блоке в http.conf или .htaccess, если разрешите переопределение для этой опции.
  • Использовать mod_rewrite. Правило специально для вашего случая может быть RewriteRule ^upload$ upload.php. Это также может быть помещено в блок в http.conf или .htaccess (если активирован). Вам нужно будет включить mod_rewrite и механизм перезаписи с RewriteEngine on.

Секунды: требуется аутентификация

Вы можете сделать это как с PHP, так и с Apache.

  • Для Apache см. Документы здесь .
  • Для PHP, используя обычную аутентификацию (имейте в виду, что пароль будет отправлен на сервер в виде обычного текста, и, если вы не используете https, он может быть взломан кем-то, кто следит за вашим трафиком), вы можете сделать что-то вроде этого:

function send401() {
    $realm = "Credentials for upload";
    header('WWW-Authenticate: Basic realm="'.$realm.'"');
    header('HTTP/1.1 401 Unauthorized');
    die();
}

function verify_credentials($user, $password) {
    //check user and password here. Return true or false
    return true;
}

if (!array_key_exists('PHP_AUTH_USER',$_SERVER) ||
        !array_key_exists('PHP_AUTH_PW',$_SERVER)) {
    send401();
}
elseif (!verify_credentials($_SERVER['PHP_AUTH_USER'],
        $_SERVER['PHP_AUTH_PW']))
    send401();

//if it gets here, the user was successfully authenticated
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...