【问题标题】:Access $_GET argument from inside .htaccess从 .htaccess 内部访问 $_GET 参数
【发布时间】:2016-08-31 15:21:25
【问题描述】:

我的服务器上有随机名称的图像(例如“8a4f5d61.jpg”),我需要使用给定的 GET 参数更改这些文件的名称。

如果我有这样的网址:

http://my.server/8a4f5d61.jpg?attachement=custom_name.jpg

我希望 Apache 添加这样的标题:

标头内容处置:“附件,文件名=$_GET['附件']”

所以用户将下载这个已经重命名为“custom_name.jpg”的文件。

我不知道如何从 .htaccess 中获取 GET 参数


在 nginx 上这很简单,这是我的工作 nginx 配置:

location ~ ^/.*\.jpg$ {
    if ($arg_inline) {
        add_header Content-Disposition "inline; filename=$arg_inline";
    }
    if ($arg_attachement) {
        add_header Content-Disposition "attachement; filename=$arg_attachement";
    }
}

使用 .htaccess 在 Apache 上是否可以实现?

【问题讨论】:

    标签: apache .htaccess http-headers response-headers


    【解决方案1】:

    我还没有测试过,但理论上,如果您的查询符合给定条件,则设置一个环境变量,稍后,使用mod_headers' Header 指令设置标题:

    RewriteEngine On
    
    RewriteCond %{QUERY_STRING} ^attachment=(.+)$ [NC]
    RewriteRule ^ - [E=file_name:%1,L]
    
    Header always set Content-Disposition "attachement; filename=%{file_name}e" env=file_name
    

    其中%{file_name}efile_name 的环境值。

    【讨论】:

    • 它必须是[E=file_name:%1,L](请修复你的帖子),它工作得很好:)谢谢!
    • @a6r 已修复,谢谢!我预计代码中至少有一个错误:P 很高兴知道它正在工作。 :)
    • 忘了说我还需要删除env=file_name,可能是服务器相关的东西...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2017-05-24
    相关资源
    最近更新 更多