mod_rewrite规则检查服务器上是否存在文件

时间:2016-11-18 15:44:17

标签: regex apache .htaccess mod-rewrite

我需要一个mod_rewrite规则,我无法自己解决。

请求网址可以是:

[(i,v) for i,v in reversed(list(enumerate('ABCDEFG'))[::-1])]

https://image.domain.com/sub.domain.com/400x400/image.jpg 中,我想检查以下文件是否存在:

.htaccess

如果此文件存在,则应该提供该文件。如果不存在,则继续执行下一个mod_rewrite规则。

mod_rewrite可以吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

如果此代码不存在,请创建sub.domain.com/.htaccess

RewriteEngine On

# ignore files and directories from all rewrite rules    
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule (^|/)index\.php$ - [L,NC]

RewriteCond %{DOCUMENT_ROOT}/sub.domain.com/cache/$1 -f
RewriteRule ^(?!cache/)(.+\.\w+)$ cache/$1 [L,NC]

#Else go to controller
RewriteRule ^(|(.*)/)([0-9]+x[0-9]+|[a-z]+[0-9]+|original)/(.*)$ ../index.php?path=$4&format=$3&folder=sub.domain.com [L,QSA]

<强>解释

  • (?!cache/) - 否定前瞻以忽略已有cache/
  • 的请求
  • (.+\.\w+) - 匹配任何至少包含扩展名的请求,并在$1
  • 中捕获该请求
  • 第一条规则有2 RewriteCond,用于检查请求是否不适用于现有文件或目录
  • 2nd RewriteCond使用$1目录中的完整路径检查是否存在cache/文件
  • 如果条件成功,那么在目标中我们只使用cache/
  • 为相对文件路径添加前缀