Минимальный код .htaccess для набора правил перенаправления

#apache #.htaccess #redirect #mod-rewrite #url-rewriting

Вопрос:

Я хочу добиться следующего поведения с наименьшим количеством правил:

  1. Принудительное использование HTTPS
  2. Перенаправление www на не-www
  3. Удалите расширения .php и .html со всех URL-адресов
  4. Перенаправление example.com/index.php и example.com/index чтобы example.com
  5. Перенаправление example.com/static/*.html для example.com/*
  6. Удалите завершающие косые черты

Прямо сейчас я использую следующие правила:

 RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]  RewriteCond %{THE_REQUEST} /([^.] ).html [NC] RewriteRule ^ /%1 [R=301,L] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*?)/?$ /$1.html  RewriteCond %{THE_REQUEST} ^.*/index RewriteRule ^(.*)index /$1 [R=301,L]  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (. )/$ RewriteRule ^ %1 [R=301,L]  

которые не включают правило для статического каталога, так как я его еще не ввел. Я планирую сделать это сейчас по причинам кэширования.

Комментарии:

1. И в чем заключается ваш вопрос?

2. О чем говорится в названии. Если те же результаты могут быть достигнуты при меньшем количестве правил.

3. Я сомневаюсь, что вы сможете сократить это… Но даже если бы это было возможно — почему? Меньшее количество правил не обязательно означает, что все более эффективно. И, конечно, все сложнее поддерживать.

4. Однако я вижу проблему с вашей реализацией: как я понимаю, запрос http://example.com/some/path не будет перенаправлен на https, верно?

5. Все перенаправляется на https. Если в моей реализации есть ошибка, то перенаправление выполняется другой настройкой сервера. Если серверу приходится обрабатывать меньше условий и делать меньше перезаписей, почему все не будет более эффективным?