Вы, вероятно, можете просто изменить первую строку следующим образом:
RewriteRule ^$ foo [QSA,L]
Флаг L
говорит моду перезаписать, что после него не должно применяться никаких других правил. Проблема сейчас в том, что второе правило применяется после первого, и вы в конечном итоге получаете «foo.html» вместо «foo», верно?
Разница между попыткой отправки в "foo" и исходным перенаправлением в "index.html" заключается в том, что второе правило применяется к запросам, которые не включают точку. Поэтому, когда первое правило перенаправлялось в «index.html», после его использования второе правило больше не действовало. Однако теперь, когда вы не перенаправляете в местоположение с точкой, второе правило применяется после первого, поэтому вы получаете двойное перенаправление.
Кроме того, вы можете сбросить флаг QSA
с первой строки, хотя это зависит от вашего сайта. Если кто-то заходит на сайт, например http://domain.com/?user=fred
, вы хотите отправить его на http://domain.com/foo?user=fred
или просто http://domain.com/foo
? Если вам не нужен Q uery S tring A , вы можете сбросить флаг QSA
и просто набрать:
RewriteRule ^$ foo [L]