apache - 如何使用重写,如果第一次重写没有产生结果(在不同的位置搜索)
问题描述
我使用以下重写规则从不同的目录中检索文件,并且效果很好:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((ffmpeg|ffprobe|ffserver|ffplay)-[0-9]+-g[0-9a-z]+\.(?:7z|dmg))$ /pub/$2/snapshots/$1 [L]
但是,只保留了 30 个文件,/pub/$2/snapshots/$1
并且旧文件被移动到不同的“归档”目录(例如/pub/archive/$1
)。
/pub/archive/$1
如果文件不再可用,有没有办法重写/pub/$2/snapshots/$1
?
解决方案
没有人向您指出的是,根据文档,RewriteCond
s 接受对RewriteRule
. 因此,如果您当前正在测试请求不是常规文件,您将改为检查您的首选替换是文件。对您的后备替换重复此操作。
编辑:您评论中的RewriteCond
s 没有意义,第一部分应该是测试的主题,第二部分应该是测试。您将反向引用放在主题中的规则。显然,你已经尝试过了,试试这个:
RewriteCond /pub/$1/snapshots/$0 -f
RewriteRule ^(ffmpeg|ffprobe|ffserver|ffplay)-[0-9]+-g[0-9a-z]+\.(?:7z|dmg)$ /pub/$1/snapshots/$0 [END]
RewriteCond /pub/archive/$0 -f
RewriteRule ^(?:ffmpeg|ffprobe|ffserver|ffplay)-[0-9]+-g[0-9a-z]+\.(?:7z|dmg)$ /pub/archive/$0 [END]
推荐阅读
- sql-server - 如何在 SQL Server 上选择包含非英文字符的记录?
- powershell - 在 PowerShell 中从第 n 次到第 n+m 次删除分隔符
- ios - PencilKit - ITMS-90338:将应用程序上传到 AppStoreConnect 时使用非公共 API
- excel - 错误 438 对象不支持此属性
- javascript - 为什么对象键存在 forEach() 方法但数组键不存在?
- android - 将旧应用程序从 appcompat 21 更新到 28 失败
- javascript - Javascript匿名函数与无函数
- nativescript - 将 ByteArray 加载到 Android 上的 ImageSource
- php - 数据表 - 我如何使用数组作为 SQL where 子句
- mule - DataWeave 2.0 日期的夏令时