.htaccess 文件可以从外部文件读取“变量”吗?

.htaccess 文件可以从外部文件读取“变量”吗?

我使用一个单独的文件software_version,该文件使用 SSI 包含在 html 文件中。这样访问者就可以在下载页面和其他一些页面上查看当前软件版本。

另外还有一个可以下载最新版本软件的 URL:

redirect /download/MySoftwareSetup.exe https://download.somedomain.com/MySoftwareSetup_2018.1.0.0.exe

我有一个更新文件的脚本software_version,并且 HTML 文件显示正确的版本。

但我必须手动编辑.htaccess文件才能使重定向到最新构建正确工作。

可以.htaccess从外部文件读取一些变量并在处理该文件时替换它吗?如下所示:

redirect /download/MySoftwareSetup.exe https://download.somedomain.com/MySoftwareSetup_${file:software_version}.exe

答案1

在 Apache 2.4 上,您可以在 mod_rewrite 指令中使用 Apache 表达式RewriteCond从文件中读取值并将其用作重定向目标的一部分。

例如:

假设该文件software_version也位于子目录中,并且包含表示版本字符串/download形式的字符串,那么您可以在根文件中执行以下操作:2018.1.0.0.htaccess

RewriteEngine On

RewriteCond expr "file('%{DOCUMENT_ROOT}/download/software_version') =~ /([\d.]+)/"
RewriteRule ^download/(MySoftwareSetup)\.exe$ https://download.somedomain.com/$1_%1.exe [R,L]

上述操作将从外部将表单的请求重定向/download/MySoftwareSetup.exehttps://download.somedomain.com/MySoftwareSetup_2018.1.0.0.exe(使用从外部文件读取的任何版本字符串)。

反向$1引用仅保存来自请求的 URL 的“MySoftwareSetup”字符串以避免重复。

正则表达式/([\d.]+)/仅捕获读取文件中的版本字符串。因此,即使有多余的字符(例如换行符),也不会捕获这些字符。这存储在%1反向引用中,并在RewriteRule 代换字符串来构造文件名。


我使用一个单独的文件software_version,该文件通过 SSI 包含在 html 文件中。

但是如果您已经在使用 SSI,那么您可以按照相同的方式修改 HTML 锚点以直接链接到正确版本的文件?

相关内容