1

解决了 :)

RewriteCond %{THE_REQUEST} index.php
RewriteRule index.php(.*)$ http://%{HTTP_HOST}$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [L]

我配置了一个重定向,以便我可以打开http://example.com/controller/action和 ModRewrite 将内部请求路由到 ...index.php/controller/action。

现在我想重定向一个用户,如果他自动打开http://example.com/index.php/controller/action到 index.php/controller/action(301 重定向)。但现在我得到了无限循环的重定向。

是否有机会将内部重定向分离到引导 index.php 并防止一个用户可以使用 index.php 子路径打开 url?

我试过这个,但这不起作用(无循环):

 RewriteCond %{REQUEST_URI} index.php/(.*)
 RewriteRule ^index.php/(.*)/$ http://%{HTTP_HOST}/$1/ [L,R=301]

 RewriteCond %{REQUEST_FILENAME} !-d 
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ /index.php/$1 [L]
4

1 回答 1

0

在 PHP 端解决这个问题的常用方法是让计数器随着每次重定向而增加。例如:https ://github.com/vjousse/symfony-1.4/blob/master/lib/controller/sfController.class.php

if ($this->getActionStack()->getSize() >= $this->maxForwards)
{
  // let's kill this party before it turns into cpu cycle hell
  throw new sfForwardException('Too many forwards have been detected for this request.');
}
于 2012-10-24T20:21:12.600 回答