问题
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:
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]
回答2:
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 R
edirect the browser.
Try this:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(index.php/)?.* index.php [L]
</IfModule>
来源:https://stackoverflow.com/questions/2938699/rewrite-url-to-index-php-but-avoid-index-php-in-the-url