16 марта 2016 г. 17:36
Написал soar

.htaccess — друг или враг?

Разгребая чужие старые проекты, наткнулись сегодня вот на такой шедевр.

RewriteRule    ^sistema/avtomatizatsiya/comodo_dragon_16_2_1_0[/]?$    index.php?prog_id=1812&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/comodo_dragon_16_2_1_0/edit[/]?$   index.php?prog_id=1812&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/panda_cloud_antivirus_3_0_1[/]?$   index.php?prog_id=2546&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/panda_cloud_antivirus_3_0_1/edit[/]?$  index.php?prog_id=2546&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/speedfan_4_46[/]?$ index.php?prog_id=1987&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/speedfan_4_46/edit[/]?$    index.php?prog_id=1987&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/gilisoft_dvd_ripper__3_0_1[/]?$    index.php?prog_id=2142&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/gilisoft_dvd_ripper__3_0_1/edit[/]?$   index.php?prog_id=2142&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/enigma_virtual_box_3_80_build_20111222[/]?$    index.php?prog_id=1789&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/enigma_virtual_box_3_80_build_20111222/edit[/]?$   index.php?prog_id=1789&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/avg_internet_security__8_5_416[/]?$    index.php?prog_id=609&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/avg_internet_security__8_5_416/edit[/]?$   index.php?prog_id=609&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/advanced_system_optimizer__3_0_609_4664[/]?$   index.php?prog_id=711&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/advanced_system_optimizer__3_0_609_4664/edit[/]?$  index.php?prog_id=711&edit=1&%{QUERY_STRING}
RewriteRule ^sistema/avtomatizatsiya/second_copy_7_1_0_33[/]?$  index.php?prog_id=353&%{QUERY_STRING}

И так более 4000 строк — полная версия тут.

Как выяснилось, при заливке нового контента — в .htaccess каждый раз автоматически дописываются новые и новые строки. И ведь каждый раз, при запросе к каждой странице и даже картинке — Apache лопатит все 4000 строк поочередно, пытаясь найти соответствие. На каждую страницу — 4000 правил для выбора подходящего редиректа и еще 80000-120000 (по 4000 на каждый из 20-30 файлов изображений, стилей и javascript’а) совершенно бесполезных regexp-проверок. Говорить здесь про постановку тегов вроде [L] наверное неуместно.

PS: Было бы смешно, если бы не было грустно. К сожалению регулярно сталкиваюсь с непониманием программистов принципов работы htaccess, и каждый раз приходится объяснять, почему best-practices это менее 10 правил и единая точка входа в веб-приложение.

PPS: Хотел запостить на govnokod.ru, но, к сожалению, у них ограничение в 100 строк. А этот шедевр необходимо созерцать только целиком.

Комментарии