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]
Tom
  • 5,068
  • 5
  • 29
  • 41

2 Answers2

2

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
  • 643,351
  • 109
  • 780
  • 844
0

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>
Richard JP Le Guen
  • 28,364
  • 7
  • 89
  • 119