.htaccess多次重写条件不起作用

ldfqzlk8  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(177)

在我的网络服务器上,我有一个图像文件夹,我想保护它不被直接链接。我知道有几种方法可以做到这一点,但我也想在.htaccess中设置两个RewriteCond来做到这一点:

  • 如果request_URI包含单词“output”(这是imagefolder),则标准React将是阻止此请求
    除非:
  • 用户根据请求发送一个名为“testeader”的头,该头可以为空

这样一来,除非发送标题,否则试图直接链接或下载的人会得到一个错误。我知道这很容易做到,这只是创造了另一个需要克服的障碍。
我的.htaccess看起来像这样:

RewriteCond "%{REQUEST_URI}" ".*output.*"
RewriteCond "{%HTTP:testheader}" "!^$"
RewriteRule ^ - [F]

我不知道为什么这个方法不起作用。如果我只使用第一个RewriteCond,并注解掉第二个,它就起作用了。
为了测试它是否工作,我通过JavaScript中的xhr请求加载图像。

var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; //so you can access the response like a normal URL
xhr.onreadystatechange = function () {
    if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
        var img = document.createElement('img');
        img.src = URL.createObjectURL(xhr.response); //create <img> with src set to the blob
        document.body.appendChild(img);
    }
};
xhr.open('GET', 'https://www.example.com/output/test.png', true);
xhr.setRequestHeader('testheader', '');
xhr.send();
igetnqfo

igetnqfo1#

将包含以下内容的.htaccess放在/output/目录中,就可以完成我想做的事情。现在我还测试了头的内容是否包含字符串'tst':

RewriteCond "%{HTTP:testheader}" !tst
RewriteRule ^ - [F]

相关问题