在htaccess中重写Cond范围

时间:2017-03-29 10:12:46

标签: apache .htaccess mod-rewrite

我想将带有版本化文件名的非现有文件重定向到当前版本。根据请求的文件名中的模式,有两个目标文件。

例如,当前文件是 setup-win-3-1-0.exe setup-win-2-7-1.exe (不存在)的请求将重定向到上一个。 (并且setup-mac-2-7-1.dmg将转到setup-mac-3-1-0.dmg)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^setup-win-[^.]+\.exe$ setup-win-%{ENV:DOWNLWIN}.exe [L,R=301,NC]
RewriteRule ^setup-mac-[^.]+\.dmg$ setup-mac-%{ENV:DOWNLMAC}.dmg [L,R=301,NC]

(之前设置ENV:DOWNL,为清楚起见省略)

我一直在网上搜索并发现一些矛盾,我发现RewriteCond只适用于下一个RewriteRule以及它应用的其他地方,直到它用Last标志填充RweriteRule。

  • RewriteCond是否适用于这两条线?
  • 如果是这样,什么时候停止RewriteCond? (如果我有更多规则,那么它们是否仍然属于Cond的范围?)

1 个答案:

答案 0 :(得分:1)

  

RewriteCond是否适用于这两条线?

答案是RewriteCond仅适用于最近的RewriteRule。它永远不会应用于使用RewriteRule指令定义的多个规则。

替代方法:如果您在所有规则之前不想一遍又一遍地想要RewriteCond,那么使用与{{相反的单独的** skip-all *规则1}}。请考虑以下示例:

RewriteCond