Dot-Htaccess

.htaccess 文件可以從外部文件中讀取“變數”嗎?

  • November 24, 2020

我使用了一個單獨的文件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

在 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(使用從外部文件中讀取的任何版本字元串)。

反向引用僅保存請求 URL 中的$1“MySoftwareSetup”字元串以保存重複。

正則表達式/([\d.]+)/僅從讀取文件中擷取版本字元串。因此,即使存在無關字元(例如換行符),也不會擷取這些字元。這儲存在%1反向引用中並在RewriteRule 替換字元串中用於構造文件名。


我使用了一個單獨的文件software_version,該文件使用 SSI 包含在 html 文件中。

儘管如果您已經在使用 SSI,那麼您大概可以以相同的方式修改 HTML 錨以直接連結到正確版本的文件?

引用自:https://serverfault.com/questions/943997