views:

82

answers:

2

I'm trying to internally redirect all requests to index.php and externally redirect all requests that contain index.php using a .htaccess file.

So URLs like http://host/test should be processed by index.php and URLs like http://host/index.php/test should be redirected to http://host/test and then processed by index.php (without redirecting the browser to index.php)

I tried the following but always get a message "Too many redirects...":

RewriteRule ^index\.php/?(.*)$ /$1 [R,L]
RewriteRule .* index.php/$0 [L]
+1  A: 

You need to look at the URL in the request line to see if /index.php/… has been requested:

RewriteCond %{THE_REQUEST} ^GET\ /index\.php/?([^ ]*)
RewriteRule ^index\.php/?(.*) /$1 [R,L]
RewriteCond $0 !^index\.php($|/)
RewriteRule .* index.php/$0 [L]
Gumbo
A: 

Among other things, if you want to do it without redirecting the browser then you don't want to use the [R] option, which means Redirect the browser.

Try this:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(index.php/)?.* index.php [L]
</IfModule>
LeguRi
Wait, this doesn't help; I misread some of the question.
LeguRi