Да, это два разных вопроса.
Сначала: удалите расширение .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