代码之家  ›  专栏  ›  技术社区  ›  lewsid

regex重写文件名

  •  0
  • lewsid  · 技术社区  · 15 年前

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

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

    my.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]
    

    这是从第三方传给我的,它不匹配,我只是不擅长regex。有人能帮我吗?

    我正在测试的URL类似于:

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

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

    3 回复  |  直到 15 年前
        1
  •  0
  •   Marcel Gosselin    15 年前

    无论文件夹名称和文件名是什么,规则都是:

    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文件位于同一文件夹中,因此我们需要删除regex中的文件夹sectio,如下所示:

    RewriteRule ^(.+)\.[0-9]+\.swf$ $1.swf [L]
    
        2
  •  0
  •   reko_t    15 年前

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

    RewriteRule ^(flash)/(.+)\.([0-9]+)\.(swf)$ $1/$2.$4 [L]
    
        3
  •  0
  •   Amarghosh    15 年前

    如果所有文件都在 折叠名 文件夹和扩展名 SWF ,可以使用以下内容:

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

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

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