Мне дали набор правил переписывания для нового сайта. Я никогда не использовал их раньше и пытаюсь понять, что мы здесь делаем
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.myco\.com
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]
RewriteCond $1 !^(CCSFG|images|fonts|themes|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
Если я понимаю это, первый набор правил
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.myco\.com
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]
говорит:
Если HTTP_HOST имеет значение И
если HTTP_HOST не начинается с www.myco.com
затем
переписать любой запрос страницы, чтобы начать с http://www.myco.com/, вернуть 301 редирект и прекратить обработку дополнительных правил
Следующий набор правил
RewriteCond $1 !^(CCSFG|images|fonts|ee-system|themes|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
говорит: Если запрос не начинается с CCSFG, изображения или шрифтов и т. д. (без учета регистра), тогда перепишите весь запрос, чтобы добавить /index.php/ и прекратить обработку дополнительных правил
Моя интерпретация верна?
Если да, то какова будет цель второго набора правил? Зачем мне добавлять к этим записям /index.php/?
Ага, почти точно.
Первый RewriteCond %{HTTP_HOST} .
существует, чтобы не перенаправлять в цикл кого-то, кто не отправляет заголовок хоста - он проверяет, что переменная заголовка хоста содержит хотя бы один символ.
Предварительное поведение существует, чтобы заставить запросы страницы обрабатываться index.php
, скорее всего, для красивых URL-адресов - исключения - для местоположений, которые должны обслуживаться физически присутствующим файлом.
Таким образом, для /images/image2.jpg
, это позволяет Apache обслуживать файл в этом месте, но для /contentpage/1/2/3
это переписывается на /index.php/contentpage/1/2/3
, позволяя приложению PHP делать свое дело.
Фактически, это технически переписано на //index.php/contentpage/1/2/3
; ясно, что у него изменилась база (из файла htaccess), и это не учитывается при его назначении.