将/ 500 /重定向到最高现有目录< = 500

时间:2015-08-11 12:10:03

标签: apache .htaccess

我可以以某种方式将所有请求重定向到给定目录到任何现有目录< = request directory吗? 例如。

/ 500 /将重定向到499,因为我只有400-499的dirs并且没有500

/ 300 /将重定向到220,因为我只有200-220的目录而且没有300

我的意思是 - 将目录视为一个数字,并找到< =比请求目录的最高匹配。

1 个答案:

答案 0 :(得分:2)

mod_rewrite不能做数学,而mod_alias(RedirectRedirectMatch)可以做得更少。您可以使用重写映射来欺骗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 );
  }
?>

在任何一种情况下,它可能效率都不高。