Используйте вариант № 2 - почему? RewriteRules в .htaccess
являются мощным инструментом, но они являются своего рода static . Я имею в виду, что вы не можете легко управлять тогда с помощью PHP (или того, что вы собираетесь использовать). Также .htaccess
не обеспечивает такой большой гибкости, но имеет некоторые преимущества (например: это немного быстрее).
Опция № 2 также нуждается в .htaccess
, как вы заметили, но в большинстве случаев RewriteRule
принимает следующую форму:
RewriteRule (.\*) index.php
Где index.php
- ваш фронт-контроллер.
Самым большим преимуществом (IMO) этого решения является то, что каждый маршрут описан в PHP (или что бы вы ни использовали), поэтому доступ к этим маршрутам, их изменение намного проще. Кроме того, эти маршруты можно использовать не только для преобразования URL в набор переменных, но и наоборот - для создания URL из набора переменных.
Я думаю, что следующий пример (из фреймворка Symfony) объяснит, о чем я говорю:
// apps/.../config/routing.yml - Describes routing rules
post:
url: /read/:id/:slug
params: { module: blog, action: index }
requirements: { id: \d+, slug: \w+ }
// apps/.../modules/blog/templates/indexSuccess.php - template for index action
<?php echo link_to($post['title'], '@post?id=' . $post['id'] . '&slug=' . $post['slug']); ?>
//creates: <a href="/read/123/my-first-blog-post.html">My first blog post</a>
Теперь, когда вы изменяете свой rounting.yml
файл и заменяете /read/:id/:slug
на /:slug_:id
, все ваши ссылки в приложении превращаются в /my-first-blog-post_123.html
.
Делать такие и другие вещи, когда вы используете опцию №2, намного проще.