#apache #.htaccess #redirect #mod-rewrite #url-rewriting
Вопрос:
Я хочу добиться следующего поведения с наименьшим количеством правил:
- Принудительное использование HTTPS
- Перенаправление www на не-www
- Удалите расширения .php и .html со всех URL-адресов
- Перенаправление example.com/index.php и example.com/index чтобы example.com
- Перенаправление example.com/static/*.html для example.com/*
- Удалите завершающие косые черты
Прямо сейчас я использую следующие правила:
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. Если в моей реализации есть ошибка, то перенаправление выполняется другой настройкой сервера. Если серверу приходится обрабатывать меньше условий и делать меньше перезаписей, почему все не будет более эффективным?