2010-05-21 3 views
1

Интересно, как я могу решить следующую проблему. в корневом каталоге моего сервера лежит файл звонков upload.phphtaccess защита паролем и mod-rewrite?

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

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

ответ

2

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

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

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

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

Секунды: требуется проверка подлинности

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

  • Для Apache см. Документы here.
  • Для 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 
+0

+1 Для деталей. Но не используйте обычную проверку подлинности; вместо этого используйте аутентификацию доступа к дайджесту. – Gumbo

Смежные вопросы