Regex 正则表达式重写文件名

Regex 正则表达式重写文件名,regex,Regex,重写闪存文件名时遇到问题: /flash/shell.1257347618.swf(这些数字是一个不断变化的时间戳,其目的是绕过浏览器缓存) 我的.htaccess如下所示: #Use mod.rewrite RewriteEngine On #Cache files which are autoversioned ExpiresActive On <FilesMatch "\.(swf)$"> ExpiresDefault "access plus 10 years" &

重写闪存文件名时遇到问题:

/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]
#使用mod.rewrite
重新启动发动机
#缓存自动版本控制的文件
过期于
ExpiresDefault“访问权限加10年”
#删除自动版本时间戳
重写规则^(swf)/(.+)\([0-9]+)\(swf)$$1/$2.$4[L]
这是从第三方传给我的,它没有正确匹配,我只是不擅长正则表达式。外面有人能帮我吗

我正在测试的URL类似于:


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

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

RewriteRule ^(flash)/(.+)\.([0-9]+)\.(swf)$ $1/$2.$4 [L]
如果所有文件都在folderName文件夹中,并且扩展名为.swf,则可以使用以下文件:

RewriteRule ^folderName/([^.]+)\.\d+\.swf$ folderName/$1.swf [L]
RewriteRule ^(.+)\.[0-9]+\.swf$ $1.swf [L]
已更新以匹配同一文件夹中的不同文件类型:

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

无论您的文件夹名和文件名是什么,规则如下:

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 ^folderName/([^.]+)\.\d+\.swf$ folderName/$1.swf [L]
RewriteRule ^(.+)\.[0-9]+\.swf$ $1.swf [L]

因此,您正试图将flash/shell.123456.swf重写为flash/shell.swf?这是有道理的,但由于某些原因,它仍然不匹配。谢谢,但不幸的是,此文件夹中还有其他文件类型。示例将该类型硬编码为swf,这就是我使用它的原因。更新以匹配您知道自己在说什么的任何扩展,但这仍然不起作用。这里有一些更多的信息,URL看起来像这样:我在/flash/目录中有.htaccess。我知道我在谈论regex时说的是什么,但是对于.htaccess,regex语法可能有一些变化。现在我看了你的最新评论,也许我们不应该把文件夹放在重写规则中。你能试试
RewriteRule^(+)\[0-9]+\.swf$$1.swf[L]