我的文件夹结构:
- nameoftherootfolder
-- app
-- public
--- .htaccess
--- index.php
现在我遇到的问题是,在某些情况下,我的apache经常在内部重写,我收到500服务器错误,这里是日志:
[Wed Jan 05 17:51:54 2011] [error] [client 127.0.0.1] Request exceeded the limit of 3 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[Wed Jan 05 17:51:54 2011] [debug] core.c(3046): [client 127.0.0.1] r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/public/index.php
[Wed Jan 05 17:51:54 2011] [debug] core.c(3052): [client 127.0.0.1] redirected from r->uri = /nameoftherootfolder/nothere/
我的.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
index.php处理所有请求并处理所访问的URL是否错误,例如不存在。
如果访问的网址存在但它的网址是“错误的”我会收到该错误。 我得到这个就是因为我设置了一个Apache别名:
Alias /nameoftherootfolder/ "C:/somepathshere/WAMP/www/nameoftherootfolder/public/"
<Directory "C:/somepathshere/WAMP/www/nameoftherootfolder/public/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
我现在如何使用Apache防止过多的内部重定向?可能有RewriteCond吗? 我正在使用Apache 2.2.11。
修改
如果我在uri中放置一个index.php/
它可以工作,但这是SEO不友好,用户不友好并且看起来很可怕,例如请求。
http://localhost/nameoftherootfolder/index.php/nothere/
或http://localhost/nameoftherootfolder/index.php/index/
编辑#2:
我添加
后RewriteBase /nameoftherootfolder/
知道了。
答案 0 :(得分:6)
我添加
后RewriteBase /nameoftherootfolder/
现在有效。
答案 1 :(得分:1)
您需要排除对index.php
本身的调用以防止无限循环。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule ^.*$ index.php [NC,L]
答案 2 :(得分:0)
在我的情况下,我在Apache中配置的另一个站点的文件夹下的子域上有一个站点。这修复了我的重写错误:
RewriteBase /