- Configure htaccess to serve static django files
- Нужен ли htaccess django?
- Настройка файла .htaccess
- Подключение файла .htaccess
- Создание файла .htaccess
- Использование файла .htaccess
- Управление доступом
- Аутентификация
- Сообщения об ошибках
- Описание типов MIME
- Серверные включения
- Редирект
- Модуль Mod_Rewrite
- Управление кэшированием данных
- Заключение
Configure htaccess to serve static django files
I’m having trouble setting up Apache to serve static Django files. I am on a shared host and don’t have access to the Apache config files. All the examples use Alias in the Apache config files, so I’m trying to figure out how to do it with mod_rewrite in .htaccess.
My setup.py looks like this:
I ran python manage.py collectstatic in the terminal and it did its thing, so that now I have a folder under /public_html/mydjangoproject/static which currently has the subfolder admin and its content.
Now I am trying to configure apache to just serve the static files rather than going through mod_wsgi, as it says in the documentation here:
We strongly recommend using django.contrib.staticfiles to handle the admin files (along with a Web server as outlined in the previous section; this means using the collectstatic management command to collect the static files in STATIC_ROOT, and then configuring your Web server to serve STATIC_ROOT at STATIC_URL)
To do this, I added line 3 in the .htaccess file as shown below. This file is at /home2/usr/public_html/mydjangoproject/.htaccess
My .htaccess file:
Note that I tried line 3 with and without the trailing slash, to no effect.
Нужен ли htaccess django?
Сейчас столкнулся с тем, что обычно прописывал редиректы в файле htaccess для php проектов. Поэтому два вопроса:
1) нужен ли этот файл для django? Есть да, то как с ним работать?
2) Если нет, то как прописывать редиректы?
так как написал Виктор Мельников не делай никогда
Апач никто не использует — nginx + uwsgi (gunicorn)
Перенаправление происходит в nginx
какие на сей счет будут варианты?
По поводу редиректов, в django для этого есть приложение redirects https://docs.djangoproject.com/en/1.9/ref/contrib/. , но стоит уточнить, что редирект работает только в том случае если начальная ссылка отдает 404. Дальше для редиректа на WWW в settings.py PREPEND_WWW = True Для обратного случая пишется middleware к примеру вот такой.
и в settings пишите REMOVE_WWW = True, для редиректа на слэш APPEND_SLASH = True , на слэш опять таки будет работать только в случае если без слэша отдает 404.
Настройка файла .htaccess
Файл .htaccess позволяет настраивать веб-сайт на сервере Apache без необходимости изменять файлы конфигурации сервера. В данном руководстве мы рассмотрим наиболее распространенные примеры его использования. Однако, прежде чем перейти к работе с этим файлом, необходимо сделать важное замечание. Несмотря на то, что страница .htaccess может быть очень полезной и существенно улучшить сайт, у нее есть два фактора негативного влияния:
1. Скорость — страница .htaccess может немного замедлить работу вашего сервера, хотя для большинства серверов это изменение будет незаметным. Это связано с расположением страницы: она влияет на все страницы в своей директории и в ее поддиректориях. При каждой загрузке страницы сервер сканирует ее директорию и все директории выше, пока не дойдет до верхнего уровня или файла .htaccess. Эти действия выполняются всегда, когда параметр AllowOverride (о нем чуть ниже) разрешает использование файлов .htaccess, независимо от того, существуют ли эти файлы на самом деле.
2. Безопасность — файл .htaccess гораздо доступнее стандартной конфигурации Apache, а изменения вносятся мгновенно (без необходимости перезапуска сервера). Предоставление пользователям права внесения изменений в файл .htaccess предоставляет им значительный контроль над самим сервером. Любая директива в файле .htaccess действует так же, как директива в самой конфигурации Apache.
В целом Apache не рекомендует использовать файл .htaccess, если пользователь сам может работать с файлами конфигурации Apache.
Подключение файла .htaccess
Если у вас есть доступ к настройкам сервера, вы можете изменить конфигурацию, чтобы разрешить использование .htaccess вместо стандартной конфигурации веб-сайта. Откройте файл конфигурации узла apache2 по умолчанию (для этого вам потребуются привилегии суперпользователя):
Найдите в этом файле следующий раздел и измените значение параметра AllowOverride c None на All. В конечном итоге раздел должен выглядеть так:
Сохраните и закройте этот файл, а затем перезапустите apache.
Создание файла .htaccess
Файл .htaccess можно создать в любом текстовом редакторе, например:
Убедитесь, что его имя строго .htaccess, а затем при помощи ftp-клиента загрузите его на сайт.
Использование файла .htaccess
Использование файла .htaccess не требует таких высоких привилегий, как доступ файлу apache2.conf, но при этом позволяет осуществлять эффективное управление сайтом. Далее мы рассмотрим ряд примеров применения этого файла.
Управление доступом
Файл .htaccess может применяться для гибкого разграничения доступа к вашему сайту или отдельным его страницам. Один из типичных вариантов – запрет доступа с определенных IP-адресов, например, следующий код запрещает доступ со всех адресов, кроме 192.168.1.1. Это полезно при обслуживании сайта, когда требуется закрыть доступ для всех, кроме администратора.
Директива Order указывает порядок выполнения следующих директив (сначала Allow — разрешение, затем Deny — запрет). Deny from All запрещает доступ вообще, но так как в соответствии с порядком выполнения сначала разрешен доступ с адреса 192.168.1.1, запрет будет действовать для всех, кроме указанного адреса. Вместо IP-адресов можно указывать подсети (например, формат 192.168 означает подсеть 192.168.x.x) или доменные имена.
Аутентификация
Использование .htaccess позволяет выделить определенную часть сайта и защитить ее паролем. Пароли .htaccess хранятся в файле .htpasswd. Создайте файл, внесите в него имена и пароли всех пользователей, которым вы хотите предоставить доступ к защищенной части сайта, и сохраните его. Файл не должен находиться в веб-директории (по соображениям безопасности). Введите в этот файл любое необходимое количество записей в формате пользователь:пароль. Для каждого пользователя нужно создать отдельную строку. Пароль должен быть указан в закодированном виде. Для кодирования паролей можно воспользоваться специальным сайтом или программой htpasswd, которая входит в комплект установки Apache. Для создания файла и добавления пользователей с помощью утилиты httpasswd используйте команду
Эта команда создаст пользователя admin и запросит ввести пароль для него. После ввода пароля запись в файл .htpasswd будет добавлена.
После этого нужно разместить файл .htaccess в директории, к которой требуется защитить доступ, и ввести в него следующий код:
AuthUserFile /usr/local/username/safedirectory/.htpasswd
AuthGroupFile /dev/null
AuthName «Пожалуйста, введите пароль»
AuthType Basic
Require valid-user
Рассмотрим значение этих параметров:
AuthUserFile: путь к файлу .htpasswd на сервере
AuthGroupFile: эта строка используется для обозначения месторасположения файла .htgroup. Так как мы его не создавали, можем указать здесь /dev/null.
AuthName: Текст, отображаемый в предложении ввести пароль.
AuthType: Тип аутентификации, используемый для проверки пароля. При проверке паролей через HTTP нужно оставить значение Basic.
Require valid-user: Ключевая фраза, которая указывает файлу .htaccess наличие нескольких пользователей, которым требуется обеспечить возможность входа в защищенную паролем часть сайта. Другой возможный вариант – ключевая фраза «require user username», обозначающая конкретного пользователя с разрешенным доступом.
Сообщения об ошибках
Файл .htaccess позволяет вам создавать для своего сайта собственные страницы, сообщающие об ошибках. Вот некоторые из наиболее распространенных ошибок:
400 Ошибка в запросе
401 Требуется авторизация
403 Доступ запрещен
404 Файл не найден
500 Внутренняя ошибка сервера
Можно воспользоваться файлом .htaccess для создания собственных страниц, которые будут более дружественны к пользователю и предоставлять больше информации, чем стандартные сообщения сервера об ошибках.
Для примера мы рассмотрим страницу 404, аналогичным образом можно описать в файле .htaccess страницы для других ошибок. Естественно, сначала нужно создать саму страницу с необходимой информацией и загрузить ее на сервер. Затем укажите ее месторасположение в файле .htaccess:
В рассматриваемом примере сервер будет искать страницу 404 в корневой директории сайта. Если она находится в какой-либо поддиректории, нужно указать путь, например:
Описание типов MIME
Если на вашем сайте есть файлы каких-либо приложений, для отображения которых ваш сервер не настроен, в файле .htaccess можно описать типы MIME при помощи следующего кода, чтобы браузер отображал их в необходимом формате:
В данном примере для файлов с расширением .m4a задано представление в виде аудиозаписей. Для поддержки других типов MIME укажите соответствующий тип и расширение файла.
Серверные включения
Серверные включения (Server Side Includes, SSI) позволяют добиться значительного повышения скорости открытия сайта. Они представляют собой директивы для динамической генерации данных на странице сервером перед ее отправкой клиенту. Один из наиболее распространенных вариантов использования SSI – обновление большого количества страниц с передачей определенных данных вместо обновления каждой страницы по отдельности (например, если вам нужно заменить цитату в нижней части страницы).
Для использования SSI введите в файл .htaccess следующий код:
Первая строка задает интерпретацию файлов с расширением .shtml как html-кода, а вторая – обработку таких файлов с любыми командами SSI на сервере.
Однако, если у вас много страниц .html, и вы не хотите менять расширение, для их обработки команд SSI в этих файлах можно воспользоваться XBitHack. Следующая строка в файле .htaccess заставляет сервер проверять все html-файлы с соответствующими разрешениями на наличие SSI:
Для того, чтобы установить необходимые для XBitHack разрешения, воспользуйтесь командой:
Редирект
Эти директивы используются с завидной регулярностью. Они позволяют перенаправить посетителя со старого URL на новую страницу. Это возможно благодаря 301-редиректу. Достаточно в код файла вписать:
В целом директива будет отображена в таком виде:
URL_LOCAL – это старый адрес, с которого осуществляется перенос пользователя.
URL_REDIRECT – новый URL, куда переносится страница.
В поле [status] могут быть следующие значения:
301 – страница перенесена навсегда.
302 – страница перенесена на время.
303 – смотрите другую страницу.
410 – страница удалена.
Модуль Mod_Rewrite
Одна из наиболее полезных функций файла .htaccess – его использование с модулем mod_rewrite, который применяется для перезаписи URL, отображаемых в браузере пользователя. Это может использоваться для их представления в более удобочитаемом формате и других задач, например, редирект с http на https можно настроить следующим образом.
Первая строка активирует модуль Mod_Rewrite, а две последующие при попытке соединения по отличному от 443 порту переписывают URL, чтобы он начинался не с HTTP, а c HTTPS, перенаправляя посетителя на защищенное соединение.
Управление кэшированием данных
Файл .htaccess можно использовать для задания различных сроков кэширования контента вашего сайта. Целесообразно увеличить срок кэширования для редко меняющихся данных, чтобы ускорить загрузку сайта. Например, следующий код
отключает кэширование для HTML, для изображений JPEG устанавливает срок в 1 день с момента обращения, а для GIF — 3 месяца с момента модификации файла.
Заключение
Страница .htaccess обеспечивает значительную гибкость при создании сайтов, но наше руководство достаточно краткое. Более подробную информацию о возможностях файла .htaccess можно получить в документации для сервера Apache.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.