2013-04-02 34 views
0

我需要下面的例子國防部重寫變量子目錄內子目錄

http://www.domain.com/a/b/$var1/newsubdir/c/$var2/$var3/$foo.mp3 

改寫到:

http://www.domain.com/a/b/$var1/subdir/c/$var2/$var3/$foo.mp3 

我的代碼需要現在稱之爲「newsubdir」,如果不是「子目錄」。由於這是許多不同變量子目錄($ var1)中的子目錄,因此這不僅僅是重命名一個文件夾的問題。

$ VAR1,$ VAR2,$ VAR3是產生取決於ACCOUNTID,用戶等物理文件路徑(不能馬上改變) $ foo是一個文件名

所以我只是尋找適當的重寫規則,可以簡單地處理「$ var1」,並基本上忽略其餘部分。我想在規則中包含「/ a/b /」,因爲代碼中可能有其他「/ b /」實例可能會被此規則捕獲。

回答

1

這是你想要的東西:

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule ^a/b/(.+)/newsubdir/c/(.+)/(.+)/(.+).mp3 /a/b/$1/subdir/c/$2/$3/$4.mp3 
+0

謝謝!這很簡單。我相信anubhava的答案也是足夠的。我還遇到了另一個與原始問題無關的問題,但對於使用Amazon S3的用戶可能會有用。我意識到我需要在我的ProxyPass中應用此功能。但是沒有意識到我需要使用ProxyPassMatch。所以它會看起來像這樣:ProxyPassMatch ^/a/b /(.+)/ newsubdir /(.+)/(.+)/(.+)http://s3-us-west-2.amazonaws。 COM/mybucket /一個/ $ 1 /子目錄/ $ 2/$ 3/$ 4 – kenitech

0

啓用mod_rewrite的,並通過httpd.conf的.htaccess,然後把這個代碼在你.htaccessDOCUMENT_ROOT目錄:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^(a/b)/([^/]+)/subdir/(c)/([^/]+)/([^/]+)/([^.]+\.mp3)$ /$1/$2/newsubdir/$3/$4/$5/$6 [L,R=302,NC]