mod_rewrite:如何search本地文件夹,子文件夹,然后redirect到index.php

我需要创build以下规则放置在我的.htaccess

  1. 首先,我想在主文件夹中删除文件(/)(如果requestedfile存在)
  2. 其次,我想在子文件夹 – > /子文件夹中search这个文件
  3. 如果文件不存在于第1点和第2点中,就像redirect请求一样,执行/index.php

什么是最好的方式来做到这一点。

感谢帮助 :)

ps第一点可以作为一个简单的解决scheme被淘汰。 所以如果用户inputurl /file.jpeg,服务器将会在/子文件夹中search这个文件,如果没有find这个文件,它会redirectrquest do index.php

我假设你的网址是这样的: somesite.com/subfolder/file.extension 如果URL不同,请提供详细信息。
将这添加到您的DocumentRoot.htaccess

 Options +FollowSymLinks -MultiViews -Indexes RewriteEngine on RewriteBase / RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule ^ - [L] RewriteCond %{REQUEST_URI} ^/([\w]+)/([\w]+\.[\w]+)$ [NC] RewriteCond %{DOCUMENT_ROOT}/%2 -f RewriteRule ^ /%2 [NC,L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] RewriteRule ^ /index.php [L] 

改为适合OP的要求。

 RewriteEngine on RewriteBase / RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule ^ - [L] RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC] RewriteCond %{DOCUMENT_ROOT}/%1 -f RewriteRule ^ /%1 [NC,L] RewriteCond %{REQUEST_URI} ([\w]+\.[\w]+)$ [NC] RewriteCond %{DOCUMENT_ROOT}/subdir/%1 -f RewriteRule ^ /subdir/%1 [L] RewriteRule ^ /index.php [L] 

这只是ThinkingMonkey概述的补充。 正如我所评论的,%变量只在下一个 cond或规则上可用。 然而,规则$变量对于conds和规则替换字符串都是可用的,因此规则2应该被写为(关于使用DOCUMENT_ROOT的相同注意事项):

 RewriteCond %{DOCUMENT_ROOT}/$1 -f RewriteRule \w+/(\w+\.\w+)$ $1 [NC,L] 

或者如果你想做相反的事情

 RewriteCond %{DOCUMENT_ROOT}/subdir/$1 -f RewriteRule (\w+\.\w+)$ subdir/$1 [NC,L]