Назад | Перейти на главную страницу

Как интерпретировать эти правила перезаписи htaccess

Мне дали набор правил переписывания для нового сайта. Я никогда не использовал их раньше и пытаюсь понять, что мы здесь делаем

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), и это не учитывается при его назначении.