2013-04-02 35 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]