Всем доброго времени суток.
Сейчас изучаю серию уроков по созданию движка сайта на php (точнее уже изучил). Суть движка такова: есть файл index.php и по сути через него работают все остальные *.php. В уроках не был разъяснен htaccess. Просто было сказано добавьте на в корень папки с сайтом данный файл с таким кодом и все:
- RewriteEngine on
- RewriteBase /
- Options All -Indexes
- RewriteCond %{REQUEST_FILENAME} -s [OR]
- RewriteCond %{REQUEST_FILENAME} -l [OR]
- RewriteCond %{REQUEST_FILENAME} -d
- RewriteRule ^resource/(.*)$ resource/$1 [L]
- RewriteRule ^catalog/(.*)$ catalog/$1 [L]
- RewriteRule ^.*$ [NC,L]
- RewriteRule ^.*$ index.php [NC,L]
- AddDefaultCharset UTF-8
- AddType 'text/html; charset=utf-8' .html .htm .shtml
Но данный код не давал мне покоя и поэтому я решил разобраться с ним. Почитал документацию, статьи. И частично разобрался. И так по порядку, как я понял данный код:
1. Первая строчка я так понял: запускает какой-то мод который будет преобразовывать URL.
2. Вторая строчка указывает директорию, где будут происходить преобразования.
3. Если нет index.php то каталог на сервере не будет отображаться.
4-6. Условия при которых будет срабатывать правило 7. (Т.е. если полный путь к файлу или сам файл: а) является обычным файлом с ненулевым размером; б) является символической ссылкой; в) является каталогом).
Внимание, вопрос: Когда будет срабатывать правило 7: при выполнении всех трех условий или хотя бы одного. Данный вопрос возник в связи с тем что:
Используйте для комбинирования условий в правилах OR вместо AND.
7. Заменяем resource/{любые символы} на resource/$1 и [L] - заканчиваем преобразования и больше ни чего не преобразовываем.
Внимание, вопрос: Что означает $1
8. Тоже самое что и предыдущее правило только параметры другие, но..
Внимание, вопрос: Почему тут нет никаких условий. Ну и опять $1.
9. Сразу..
Внимание, вопрос: Что вообще тут происходит? Т.е. мы преобразовываем абсолютно любой URL в.... Ничто?! Второго параметра то нет.
10. Тут, мне кажется, правило означает, перенаправление любого запроса на index.php.
Внимание, вопрос: Верно?
11-12. Тут понятно все.
Внимание, главный вопрос: Почему условие есть только у одного правила, и почему это работает?