正则表达式重写文件名

时间:2009-11-04 15:37:27

标签: regex

无法重写Flash文件的名称:

/flash/shell.1257347618.swf(数字是一个不断变化的时间戳,想法是绕过浏览器缓存)。

我的.htaccess看起来像这样:

#Use mod.rewrite
RewriteEngine On

#Cache files which are autoversioned
ExpiresActive On
<FilesMatch "\.(swf)$">
    ExpiresDefault "access plus 10 years"
</FilesMatch>

#Remove autoversion timestamp
RewriteRule ^(swf)/(.+)\.([0-9]+)\.(swf)$ $1/$2.$4 [L]

这是从第三方传递给我的,但它没有正确匹配,我只是不擅长正则表达式。那里的任何人都可以帮助我吗?

我正在测试的网址类似于:

http://dev.somedomain.domain.com/flash/shell.1257347618.swf

我已将.htaccess文件安装到flash目录。

3 个答案:

答案 0 :(得分:0)

您使用flash /但规则假设为swf /,更改为:

RewriteRule ^(flash)/(.+)\.([0-9]+)\.(swf)$ $1/$2.$4 [L]

答案 1 :(得分:0)

如果所有文件都在 folderName 文件夹中并且扩展名为 .swf ,则可以使用以下命令:

RewriteRule ^folderName/([^.]+)\.\d+\.swf$ folderName/$1.swf [L]

更新以匹配同一文件夹中的不同文件类型:

RewriteRule ^folderName/([^.]+)\.\d+\.(\w+)$ folderName/$1.$2 [L]

答案 2 :(得分:0)

无论您的文件夹名称和文件名是什么规则:

RewriteRule ^([^/]+)/([^.]+)\.[0-9]+\.swf$ $1/$2.swf [L]

会将somefolder/file.329873.swf转换为somefolder/file.swf

如果您需要允许包含topfolder/somefolder/file.329873.swf等子文件夹的文件,并希望保留所有文件夹层次结构:

RewriteRule ^(.+)/([^.]+)\.[0-9]+\.swf$ $1/$2.swf [L]

如果您的名字可能没有数字部分,请使用

RewriteRule ^([^/]+)/([^.]+)(\.[0-9]+)?\.swf$ $1/$2.swf [L]

最终答案在评论中。问题是.htaccess与.swf文件位于同一文件夹中,因此我们需要删除正则表达式中的文件夹,如下所示:

RewriteRule ^(.+)\.[0-9]+\.swf$ $1.swf [L]