Простой мод переписать вопрос - PullRequest
1 голос
/ 01 апреля 2009

Вот мой текущий файл .htaccess:

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Как видите, запросы к http://domain.com переходят на http://domain.com/index.html. Я хочу изменить это так, чтобы они переходили на http://domain.com/foo,, обратите внимание, что не существует как файл или папка, она обрабатывается рельсами. Как мне это сделать? Обратите внимание, что я пробовал следующее, и оно не работает:

RewriteRule ^$ foo [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Спасибо!

1 Ответ

1 голос
/ 01 апреля 2009

Вы, вероятно, можете просто изменить первую строку следующим образом:

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]
...