将所有请求重定向到index.php .htaccess

时间:2016-07-26 16:47:28

标签: php apache .htaccess

这是我的.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

我收到500内部服务器错误。执行此命令后: cat /var/log/apache2/error.log 我收到了这个错误:

AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

请帮我理清一下?

2 个答案:

答案 0 :(得分:2)

将您的htaccess规则更改为以下,然后它将起作用。

   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.+)$ /index.php/$1 [L,QSA]

答案 1 :(得分:0)

结帐this serverfault answer

总之,[L]仅停止当前规则集的处理,并将重写的URL传递回URL解析引擎,后者可能会再次应用您的规则集。 10倍。然后Apache说停止。

如果重写已经转到index.php,您可以添加不重写的条件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule . index.php [L]

或者,您可以在其他规则之前检查ENV:REDIRECT_STATUS,并停止应用任何其他规则:

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]