2009-11-04 56 views
0

遇到问题重写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] 

这是传给我从第三方,它不是正确的匹配,我只是不擅长的正则表达式。有人能帮我吗?

我用来测试的URL是类似于:

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

而且我已经安装了.htaccess文件到闪存目录。

+0

所以你想重写闪存/ shell.123456 .swf到flash/shell.swf? – RMcLeod 2009-11-04 15:40:29

+0

这是正确的。 – lewsid 2009-11-04 15:48:32

回答

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文件,所以我们需要删除的文件夹sectio万年像下面的正则表达式:

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

谢谢,但仍然没有骰子。 – lewsid 2009-11-04 15:55:33

+0

我相信你知道你在说什么,但这仍然不起作用。这里有一些更多的信息,网址如下所示: http://dev.somesubdomain.somedomain.com/flash/shell.1257347618.swf 我在/ flash /目录下有.htaccess。 – lewsid 2009-11-04 16:02:53

+0

当我说正则表达式时,我知道我在说什么,但是。htaccess,在正则表达式语法上可能会有一些变化。现在我看看您的最新评论,也许我们不应该尝试将文件夹放入重写规则中。你可以试试'RewriteRule ^(。+)\。[0-9] + \。swf $ $ 1.swf [L]' – 2009-11-04 16:07:01

0

使用闪光灯/但规则假定SWF /,更改为:

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

这很有道理,但由于某种原因它仍然不匹配。 – lewsid 2009-11-04 15:50:01

0

如果所有文件都在FOLDERNAME文件夹,并具有扩展瑞士法郎,您可以使用以下命令:

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

更新,其中在同一文件夹匹配不同的文件类型:

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

谢谢,但不幸的是在这个文件夹中还有其他文件类型。 – lewsid 2009-11-04 15:50:32

+0

这个例子硬编码类型为SWF,这就是为什么我使用它。更新以匹配任何扩展 – Amarghosh 2009-11-04 16:30:40