我可以以某种方式将所有请求重定向到给定目录到任何现有目录< = request directory吗? 例如。
/ 500 /将重定向到499,因为我只有400-499的dirs并且没有500
/ 300 /将重定向到220,因为我只有200-220的目录而且没有300
我的意思是 - 将目录视为一个数字,并找到< =比请求目录的最高匹配。
答案 0 :(得分:2)
mod_rewrite不能做数学,而mod_alias(Redirect
和RedirectMatch
)可以做得更少。您可以使用重写映射来欺骗mod_rewrite,但这样效率会相当低,或者需要重新映射地图 - 并且每次添加新目录时都需要重新启动apache。那将是愚蠢的。
我建议改用脚本。我们使用mod_rewrite来测试目录/文件是否存在,然后在不是这种情况下重写脚本。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[0-9]{3}/ router.php
在router.php中有这样的东西
<?php
$num = getNumberFromUrl( $_SERVER['REQUEST_URI'] );
while( $num > 0 && !file_exists( "{$num}/" ) {
$num--;
}
if( $num > 0 ) {
header( "Location: " . replaceNumInUrl( $_SERVER['REQUEST_URI'], $num ), 302 );
}
?>
在任何一种情况下,它可能效率都不高。