检查.htaccess中是否存在其他文件请求

时间:2011-04-13 11:26:22

标签: apache .htaccess mod-rewrite

我正在尝试在.htaccess文件中完成以下操作,但似乎无法让它工作......

  • 如果文件〜/ maintenance.htm存在,则暂时重定向到该文件(R = 302)并附加当前查询字符串(QSA),结束(l)
  • 如果请求了maintenance.htm文件(由用户刷新)并且存在,则显示文件,查询字符串和结束(L,QSA)
  • 请求maintenance.htm文件(由用户刷新)并且不再存在,重定向到index.php(R = 301)并追加查询字符串(QSA),结束(L)

第一步是它出错了,我似乎无法找到一种方法来检查文件是否存在,当前没有被请求。 我一直在寻找很多不同的东西,也就是RewriteMaps,但似乎无法从重写映射重定向,或者这对我来说不太清楚。 例如,如果我编写简单的perl脚本来检查文件是否存在,我如何从中获取结果是否重定向?

感谢您提供任何帮助/提示!

2 个答案:

答案 0 :(得分:3)

我不确定你已经拥有什么,但这应该有效。由于内部重定向循环,使用-f时可能会出现500错误。

RewriteEngine on

RewriteCond %{REQUEST_URI} !/maintenance.htm
RewriteCond %{DOCUMENT_ROOT}/maintenance.htm -f
RewriteRule (.*) /maintenance.htm [L,R]

RewriteCond %{REQUEST_URI} /maintenance.htm
RewriteCond %{DOCUMENT_ROOT}/maintenance.htm !-f
RewriteRule (.*) /index.php [L,R=301]

希望这有帮助。

答案 1 :(得分:0)

也许RewriteCond %{REQUEST_FILENAME} !-f有助于检查文件是否存在

  

' - f'(是常规文件)对待   TestString作为路径名并进行测试   它是否存在,是一个   常规文件。

请参阅:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html