2016-09-11 5 views
1

私は、urlではなく、名前でwaveファイルをキャッシュするサードパーティのサイトで作業しています。自分のシステムには同じ名前であるが異なるディレクトリに多くのwaveファイルがありますが、同じ名前のファイルを別のディレクトリに要求すると、サードパーティのサイトは間違ったファイルを再生します。Apache再書き込みルールのパス区切り文字としてリライト文字列を書き換えます。

URLからスラッシュ( '/')を削除し、それを文字列_dir_separator_と組み合わせて、システム全体でウェーブファイルを一意にすることを考えました。

_dir_separator_のすべての出現が内部的にスラッシュに書き換えられるように、URLをどのように書き換えることができますか?例えばのために

。、このファイルの​​

を要求すると、この1 http://mysite/media/voice_scripts/script_en.wav

を選ぶ必要がありますが、ディレクトリ構造がそうパターンの固定数が動作しない書き換え、複数のレベルの深さであることに注意してください。

編集:私は心を変え、_dir_sepator_stringの代わりにハイフン( - )を使用したいと思います。重要なのは、私はこれを書き直すことなく動作させる必要があるということです。

RewriteRule ^([^-]*)-([^-]*-.*) $1/$2 [N] 
    RewriteRule ^([^-]*)-([^-]*)$ $1/$2 [L] 

答えて

0

ホストでは、次を使用することができ、MOD-書き換えを可能にした、とのhtaccessファイルを設定する機能を提供するためにAllowOverrideを設定した場合:

RewriteEngine On 

RewriteCond %{REQUEST_URI} _dir_separator_ [NC] 
RewriteRule ^(.*)_dir_separator_(.+)$ /$1/$2 [R,L] 

テスト、それは上のカールで私のシステムは提供します:ハイフン(-)キャラでの使用のために

$ curl -LI http://localhost/media_dir_separator_voice_scripts_dir_separator_script_en_v11.wav 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media_dir_separator_voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 302 Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Location: http://localhost/media/voice_scripts/script_en_v11.wav 
Content-Type: text/html; charset=iso-8859-1 

HTTP/1.1 404 Not Found 
Date: Sun, 11 Sep 2016 05:59:26 GMT 
Server: Apache/2.4.18 (Win64) PHP/7.0.4 
Content-Type: text/html; charset=iso-8859-1 

をCTER:

RewriteRule ^(.*)-(.+)$ /$1/$2 [N] 
+0

は、私は私の心を変えました。 _dir_separate_の代わりに、私はシンプルなダッシュ( - )を使うことを好みます。私はファイルのどれもそれらの中にダッシュを持っていないことを確信します。私はこれを試しました RewriteRule ^([^ - ] *)$([^ - ] *) - ([^ - ] * - 。*)$ 1/$ 2 [N] $ 1/$ 2 [L] しかし、うまくいかないようです。リダイレクトせずに作業するにはリライトソリューションが必要です。 – SenG

+0

@SenG 'L'フラグは入れないでください。 – hjpotter92

+0

vhostファイルに正確なスニペットを使用しましたが、まだリダイレクトされています。ブラウザに新しいURLが表示されます。 – SenG

関連する問題