如果install.php存在,则访问install.php,否则访问index.php

时间:2014-07-22 12:06:16

标签: php regex apache .htaccess mod-rewrite

在访问我的php脚本之前,用户需要访问install.php并配置脚本。 install.php将在完成后自行删除。删除install.php后,用户必须能够访问index.php

我尝试过:

RewriteEngine On
RewriteBase /myscript/
RewriteRule ^ install.php [E]

如果install.php不存在,我可以将用户重定向到install.php,但不能重定向到index.php。

我不知道RewriteCond是否存在install.php:

RewriteEngine On
RewriteBase /myscript/
RewriteCond ?? ??
RewriteRule ^ install.php [E]

感谢任何帮助。顺便说一句,我对.htaccess配置并不是很好。

更新:

感谢您的评论和回复。是的我知道我可以通过我的PHP脚本重定向,如:

if(file_exists('install.php')){
     header('Location: http://'.$domain.'/install.php');
}

但我们可以用.htaccess做同样的事吗?

4 个答案:

答案 0 :(得分:2)

尝试将其添加到.htaccess文件夹中的myscript文件:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/myscript/install.php -f
RewriteRule ^ install.php [L]

<强>解释

  • 条件检查文件install.php是否存在于myscript文件夹
  • 如果符合条件,规则将重写任何请求(因为字符串锚^的开头将匹配任何文件)到install.php

答案 1 :(得分:1)

对于纯.htaccess解决方案:

RewriteCond %{DOCUMENT_ROOT}/myscript/install.php -f
RewriteRule ^ /myscript/install.php [L]

答案 2 :(得分:1)

您可以使用DirectoryIndex来实现您的目标(docs)。请在应用程序根目录的.htaccess中进行此操作。

DirectoryIndex install.php index.php

RewriteEngine on
RewriteBase /myscript/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewrietRule . index.php [E]

如果用户进入安装了应用程序的目录,例如http://example.com/myscript/,它将首先尝试加载install.php,如果不存在,它将尝试加载index.php。如果用户转到http://example.com/myscript/index.php,您运气不好,但转到该网址没有意义!如果你担心,你最好使用romaneso的答案,一直加载index.php并在必要时从那里加载install.php。

答案 3 :(得分:0)

如果文件存在,我会尝试检查该方法

bool file_exists ( string $filename )