Linux

Apache 重寫以從原始請求 URL 中提取多條數據

  • October 7, 2017

嘗試創建僅適用於影片文件的 Apache 重寫,並應用於專用的影片服務網路伺服器。

它需要重寫邏輯,從原始請求中提取多條資訊,包括HTTP_HOST域名、request_uri 和目標文件類型。我已經做了很多尋找幫助和建議的工作,並且經歷了大量的反複試驗……並且只是接近了,而且似乎無法做到 100% 正確。這是我要完成的工作:

傳入 URL 範例:

https://www.example1.com/images/source/vidtest.mp4

預期登陸網址:

https://www.webvideo.com/example1_video/images/source/vidtest.mp4

因此,僅適用於以影片文件擴展類型(例如.mp4)結尾的請求的重定向,僅提取傳入的域名(不是前導www,或原始 HTTP_HOST 的尾隨.com),並提取剩餘的 URI… . 並將其重定向到新的網路伺服器,進入以原始主機域名(例如example1)命名的影片文件夾,後跟_video,然後附加整個原始 URI 的其餘部分。

這是我目前擁有的重定向邏輯:

RewriteCond %{HTTP_HOST} ^www\.[^.]+\.com$
RewriteCond %{REQUEST_URI} \.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)$ [NC]
RewriteRule ^/(.*)$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

僅接收其中一種影片文件擴展類型的傳入請求似乎工作正常,並且它正確地重定向到預期的目標www.webvideo.com域,並且它也正確地附加了尾隨 URI($1變數)。但不幸的是,它將傳入的文件類型(例如mp4)放在 %1 之前的變數位置_video,而不是原始域名。因此,該範例傳入請求導致重定向到此:

https://www.webvideo.com/mp4_video/images/source/vidtest.mp4

有人可以建議更正嗎?我必須做些什麼才能將原始域名作為變數取出並放入新的文件夾路徑,並且重定向僅適用於影片文件類型,並且還保留尾隨 URI 的其餘部分?請注意,將會有多個不同域的傳入請求(這就是為什麼需要為新文件夾路徑提取域名的原因!),這些請求都將被重定向到同一個 Web 服務 apache 目標。

你和你想擁有的很接近,你只缺少(&)

RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.com$
RewriteCond %{REQUEST_URI} \.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)$ [NC]
RewriteRule ^/(.*)$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

重點是%1指重寫條件中的第一個擷取組。擷取組在 (&之間),在您的情況下,這是 URI Extension (mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)。在您的主機條件中添加一個新的擷取組會給您兩個擷取組,但對於您的重寫規則,您只需要第一個。

一個附加說明:這僅適用於沒有其他子域的主域,www除非您擁有像www.video.example.com這樣的 FQDN 將不起作用。

編輯:

第一個程式碼範例基本上只關注主要問題,但如命令中所述,可以優化孔重寫規則。

RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.com$ [NC]
RewriteRule ^/?(.*\.(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg))$ https://www.webvideo.com/%1_video/$1 [R=301,NC,L,NE]

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