我使用一个单独的文件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.exe
到https://download.somedomain.com/MySoftwareSetup_2018.1.0.0.exe
(使用从外部文件读取的任何版本字符串)。
反向$1
引用仅保存来自请求的 URL 的“MySoftwareSetup”字符串以避免重复。
正则表达式/([\d.]+)/
仅捕获读取文件中的版本字符串。因此,即使有多余的字符(例如换行符),也不会捕获这些字符。这存储在%1
反向引用中,并在RewriteRule
代换字符串来构造文件名。
我使用一个单独的文件
software_version
,该文件通过 SSI 包含在 html 文件中。
但是如果您已经在使用 SSI,那么您可以按照相同的方式修改 HTML 锚点以直接链接到正确版本的文件?