защита паролем htaccess и модификация - переписывают?

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

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

Действительно ли это возможно с htaccess?

1
задан skaffman 21 May 2010 в 07:03
поделиться

1 ответ

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

Во-первых: удалите расширение .php.

В основном это можно сделать двумя способами.

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

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

Вы можете сделать это как с 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
2
ответ дан 3 September 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: