web-dev-qa-db-ja.com

元のリクエストURLから複数のデータを抽出するためのApacheの書き換え

専用のビデオサービスWebサーバーに、ビデオファイルのみに適用されるApacheリライトを作成しようとしています。

HTTP_Hostドメイン名、request_uri、ターゲットファイルタイプなど、元のリクエストから複数の情報を抽出する書き換えロジックが必要です。私は支援や提案をかなり探し、膨大な量の試行錯誤を繰り返しました......そして近づいてきて、100%正しいとは思えません。これが私が達成しようとしていることです:

受信URLの例:

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

目的のランディングURL:

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

したがって、ビデオファイル拡張子タイプ(.mp4など)で終わるリクエストにのみ適用され、着信ドメイン名のみを抽出するリダイレクト(元のHTTP_Hostからの先頭のwwwまたは末尾の.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]

これらのビデオファイル拡張子タイプの1つに対する着信要求のみを取得するように正しく機能しているようであり、目的のターゲットwww.webvideo.comドメインに適切にリダイレクトされ、末尾のURI($1変数)も適切に追加されています。ただし、残念ながら、元のドメイン名ではなく、受信ファイルタイプ(mp4など)を_videoの前の%1変数の場所に配置しています。そのため、着信リクエストの例では、次のようにリダイレクトされます。

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

誰かが修正を提案できますか?元のドメイン名を変数として新しいフォルダーパスに取得し、リダイレクトをビデオファイルタイプにのみ適用し、残りのURIも引き継ぐには、どうすればよいですか?複数の異なるドメインに対する着信要求があり(そのため、新しいフォルダーパス用にドメイン名を抽出する必要があります!)、すべて同じ単一のWebサービスApacheターゲットにリダイレクトされることに注意してください。

3
K.McCallum

あなたはあなたが欲しいものに非常に近く、あなたは()を逃しているだけです

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拡張(mp4|mp3|mov|mpg|mpeg|webm|wmv|ogg)でした。ホスト条件に新しいキャプチャグループを追加すると、2つのキャプチャグループが得られますが、書き換えルールには最初の1つだけが必要です。

1つの追加の注意:これは、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]
3
Webdesigner