2009-04-01 4 views
1

Вот мой текущий файл .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

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

RewriteRule ^$ foo [QSA,L] 

Флаг L говорит Mod-переписать, что она не должна применять какие-либо другие правила после того. Проблема в том, что второе правило применяется после первого, и вы попадаете в «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 Тринга A ppended, вы можете опустить QSA флаг, а просто:

RewriteRule ^$ foo [L] 
+0

Проблема с L является то, что последняя строка не выполняет , поэтому он не идет на рельсы (я использую fastcgi). Я даже попробовал ваше предложение (без L) и удалил вторую строку, и он все еще не работал. – Birdman

Смежные вопросы