2010-09-23 54 views
1

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

我曾尝试使用以下重写规则有部分成功:

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

不过,我可以让它开始工作的唯一方法是通过前添加一个重写条件,做一些类型的检查,以确保请求是不是为index.php,否则我得到一个500内部服务器错误。我看了看错误日志,看起来是由于过多的递归。我明白,如果请求index.php无论如何都不重要,因为他们会打到正确的文件,但我不明白这种情况的需要,当我不知道为什么它必须在那里时,我感到肮脏,包括它。

工作规则......

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

其还值得一提的是,重写条件藏汉工作,但再次我不知道为什么它的需要!

RewriteCond %{REQUEST_FILENAME} !index.php 

回答

1

RewriteCond表示仅在满足这些条件时评估以下RewriteRule。 在你的情况下,用文字“如果请求的URI 不是以/index.php开头,然后重新路由到index.php”。

你需要检查,因为否则你会将index.php重新路由到自己的无限循环。

+0

它是无限循环的一部分,我真的很困惑,我知道我会重写index.php index.php一次,但我不明白为什么它会尝试做第二次(或第三或第四次... ) 时间。我想我可能在这里丢失了一些重要的东西...... – atkaye 2010-09-23 09:17:51

+0

它为每个请求评估RewriteRule。所以在你的初始请求发送到index.php之后,index.php的请求也会被重新评估,并重新路由到index.php ..等等。 – 2010-09-23 09:56:29

+0

找到更多关于递归的信息给其他感兴趣的人... http://wiki.apache.org/httpd/RewriteLooping – atkaye 2010-09-23 10:01:17

相关问题