Да, это два разных вопроса.
Во-первых: удалить расширение .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
+1 Для деталей. Но не используйте обычную проверку подлинности; вместо этого используйте аутентификацию доступа к дайджесту. – Gumbo