htaccess将所有请求重写为单个控制器

时间:2010-09-23 08:51:54

标签: php .htaccess

以类似于codeigniter的方式,我想捕获所有请求并将它们重写为index.php文件,该文件位于我的Web可访问文件夹的根目录中。与codeigniter上的示例不同,我不想在重写之前检查文件是否存在(因为我不想允许直接访问任何文件)。

我使用以下重写规则获得了部分成功:

RewriteRule ^(.*)$ index.php/$1/ [L]

然而,我能让它工作的唯一方法是在它之前添加一个重写条件,它会进行某种检查,以确保请求不是index.php,否则我得到500内部服务器错误。我看过错误日志,似乎是由于过多的递归。我明白,如果请求index.php它无关紧要,因为它们会打到正确的文件,但我不明白这种情况的需要,当我不知道为什么它必须在那里时,我感到很脏,包括它?

工作规则是......

RewriteCond %{REQUEST_URI} !^/index.php/

还值得一提的是,这个重写条件还有效,但我又不知道为什么需要它!

RewriteCond %{REQUEST_FILENAME} !index.php

1 个答案:

答案 0 :(得分:1)

RewriteCond意味着,只有满足这些条件才会评估以下RewriteRule。 在您的情况下,单词“如果请求的URI 以/index.php开头,则重新路由到index.php”。

您需要检查,否则您将在无限循环中将index.php重新路由到自身。