如果在当前文件夹htaccess中找不到文件,则显示一个文件夹文件

时间:2015-04-07 21:52:37

标签: apache .htaccess redirect

我想编写一个简单的 .htaccess 脚本来执行以下任务:

  • http://www.website.com/files/documents/
  • 中有一个包含文档的文件夹
  • 此文件夹包含一些subfolders,例如imagessheetstexts等。
  • main foldersubfolders
  • 中可能包含一些文档

必须发生以下情况:

  • 用户请求http://www.website.com/files/documents/images/image1.jpg且该文件不存在 - > user会将一个目录重定向到文件存在的http://www.website.com/files/documents/image1.jpg

  • 用户请求http://www.website.com/files/documents/sheets/excel.xls且该文件不存在 - >用户被重定向到一个目录,直到http://www.website.com/files/documents/excel.xls

  

注意:它应该对所有文件夹名称有效且与路径数无关

示例:

www.example.com/one/two/three/four/3.jpg

www.example.com/one/two/three/2.jpg

www.example.com/one/two/three/four/five/4.jpg

以下是我尝试过的代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?/)?[^/]+/(.+)$ $1$2 [L]

它适用于2级文件夹,但不适用于3级或更多文件夹。

www.example.com/one/two/1.jpg =>的工作

www.example.com/one/two/three/2.jpg => 没有工作

www.example.com/one/two/three/four/3.jpg => 没有工作等等......

1 个答案:

答案 0 :(得分:0)

我觉得你不想让你的正则表达不合适,你想让它吃掉所有的文件夹直到最后一个。尝试:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)?[^/]+/([^/]+)$ $1$2 [L]