Apache 403 при обслуживании статических файлов Django

Я просмотрел множество связанных сообщений, но ничего не помогает.
Соответствующая информация:

Версия Django — 1.4

Версия Apache — 2.2

Версия Python — 2.7

ОС — Xubuntu 12.04

БД — Mysql

Я пытаюсь заставить Apache обслуживать оба приложение django и статические файлы. Проблема становится очевидной на сайте администратора, на котором не отображаются стили или изображения CSS. Мой сайт администратора в настоящее время выглядит так:

(ну, я бы включил изображение, но переполнение стека не позволило мне. Достаточно сказать, что он выглядит как страница администратора всех, кто размещал сообщения в этой теме, см. Apache не обслуживает статические файлы администратора django )

Части приложения, такие как моя страница входа и некоторый динамический контент, работают нормально, но когда я пытаюсь обслуживать статический контент, я получаю ошибку 403. Кроме того, когда я пытаюсь перейти к таблице стилей вручную, просматривая отображаемый HTML-код страницы администратора и щелкая ссылку на таблицу стилей в

http://localhost/static/admin/css/base.css 

, я получаю ошибку 403. Я могу перейти туда в терминале и изменить разрешения для папки, чтобы пользователь Apache www-data явно имел доступ ко всем файлам.

Вот соответствующие фрагменты моего httpd.conf:

#AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1

Alias /media/ "/usr/local/wsgi/media/"
Alias /static/ "/usr/local/wsgi/static/"


Order deny,allow
Allow from all



Order deny,allow
Allow from all

WSGIScriptAlias / "/home/noah/Documents/Web/Basic/apache/django.wsgi"


Order allow,deny
Allow from all

По совету друга я также скопировал вышеуказанное на мои сайты, доступные по умолчанию:


    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    TypesConfig /etc/mime.types
    
        Options FollowSymLinks
        AllowOverride None
    
    
        Options -Indexes FollowSymLinks
            AllowOverride AuthConfig FileInfo
            Order allow,deny
            Allow from all
        
    
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    
    SetEnv DJANGO_SETTINGS_MODULE Basic.settings
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    

#AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1

Alias /media "/usr/local/wsgi/media/"
Alias /static "/usr/local/wsgi/static/"


Order deny,allow
Allow from all



Order deny,allow
Allow from all

WSGIScriptAlias / "/home/noah/Documents/Web/Basic/apache/django.wsgi"


Order allow,deny
Allow from all


    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    


Вот мой django.wsgi

import os
import sys

path = '/home/noah/Documents/Web/Basic'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'Basic.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

И, наконец, вот мои настройки.py:

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = '/usr/local/wsgi/media/'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = 'http://localhost/media/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/usr/local/wsgi/static/'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = 'http://localhost/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = 'bmc&epl=#u)r3elkvj#@90*cji*z^cg8dnh$7j9kh@g9wzw(ih'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'Basic.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'Basic.wsgi.application'

Мой проект Django 'Basic' находится в ~/Documents/Web/, который имеет символическую ссылку на /var/www/

Любая помощь приветствуется, и дайте мне знать, если она вам понадобится больше файлов/информации.

11
задан Community 23 May 2017 в 12:00
поделиться