Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess密码保护和mod重写?_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache htaccess密码保护和mod重写?

Apache htaccess密码保护和mod重写?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我不知道怎样才能解决下面的问题。 在我的服务器的根目录上有一个名为upload.php的文件 我希望能够在我的URL中添加一个“/upload”(不带.php),浏览器应该要求输入密码(可能的话还需要用户名)。我输入了正确的密码(和用户名)。应该打开upload.php 这在htaccess中可能吗?是的,这两个问题都是截然不同的 首先:删除.php扩展名 这主要有两种方法 启用内容协商。这将允许您引用其他没有扩展名的资源,甚至有几个名称相似但扩展名不同的文件,并允许Apache根据浏览器的喜

我不知道怎样才能解决下面的问题。 在我的服务器的根目录上有一个名为upload.php的文件

我希望能够在我的URL中添加一个“/upload”(不带.php),浏览器应该要求输入密码(可能的话还需要用户名)。我输入了正确的密码(和用户名)。应该打开upload.php


这在htaccess中可能吗?

是的,这两个问题都是截然不同的

首先:删除.php扩展名

这主要有两种方法

  • 启用内容协商。这将允许您引用其他没有扩展名的资源,甚至有几个名称相似但扩展名不同的文件,并允许Apache根据浏览器的喜好选择最佳文件。请参阅链接。如果允许覆盖此选项,则可以在http.conf或.htaccess中的块中使用
    Options+MultiViews
    启用它
  • 使用mod_重写。专门针对您的案例的规则可以是
    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