以类似于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
它是无限循环的一部分,我真的很困惑,我知道我会重写index.php index.php一次,但我不明白为什么它会尝试做第二次(或第三或第四次... ) 时间。我想我可能在这里丢失了一些重要的东西...... – atkaye 2010-09-23 09:17:51
它为每个请求评估RewriteRule。所以在你的初始请求发送到index.php之后,index.php的请求也会被重新评估,并重新路由到index.php ..等等。 – 2010-09-23 09:56:29
找到更多关于递归的信息给其他感兴趣的人... http://wiki.apache.org/httpd/RewriteLooping – atkaye 2010-09-23 10:01:17