当请求下载Apache http服务器中的文件时,我如何重定向



当请求来到apache http下载文件时,我想重定向到另一个url

例如,客户端调用https://example.com/download/apps/v1.01.apk

/download/apps/v1.01.apk是一个真正的路径

我想当调用url apache阻止下载它并重定向到另一个url

为此,您需要使用。htaccess文件。

在项目的根目录下创建一个.htaccess文件,并在文件中输入以下内容:

RewriteEngine on
Options -Indexes -Multiviews
RewriteRule ^(v1.01.apk)$ your-new-url.php

值得记住的是,当web服务器第一次收到请求时,URL只是一个字符串,服务器必须决定做什么。

它可以做的一件事是在磁盘上查找名称与URL匹配的文件。如果它找到一个文件,它可以决定如何处理信息,可能与浏览器在请求中发送的其他信息相结合,或者它找到的关于该文件的信息。

最终,服务器将给出一个响应——可能是一个包含它找到的文件内容的响应;也许是运行特定脚本的结果;可能是一个指示重定向到另一个URL的响应。

对于大多数web服务器软件,您可以以非常灵活的方式配置所有这些决策。你可以说"如果URL中有一个v,在这个文件夹中查找一个文件;如果存在,用文件名作为参数运行这个PHP脚本;如果没有,发出一个重定向响应到一个URL,其中v被替换为一个x"

对于Apache,您将看到许多建议使用.htaccess文件来完成此操作。这些是而不是这是Apache的主配置,但是当您使用共享服务器并且出于安全原因无法编辑主配置时,它们是放置额外配置的方便位置。

在Apache中触发重定向响应的具体配置行如下所示:

RewriteRule pattern-to-match-against-request url-to-redirect-to [R]

第一个参数是一个"正则表达式"。可以是一般的,也可以是具体的。注意,.的意思是"任意字符",所以如果你想特别匹配一个点,写.

第二个参数可以包含像$1和$2这样的变量,它们指向所请求URL的一部分"捕获"通过将它们放在模式中的括号中

最后的[R]也可以有一个类型,如[R=temp][R=307],这将改变浏览器如何处理重定向,缓存它,等等。你也可以添加其他标志,比如[R,NC]表示"重定向,不区分大小写"。

最后,您可以在规则之前添加任意数量的RewriteCond,例如RewriteCond -f %{REQUEST_URI}表示"如果存在与请求的URL同名的文件"。

最新更新