Я новичок в веб-серверах, поэтому будьте осторожны:
Я установил новый сервер apache2 в системе Mint (Ubuntu-base, что также означает Debian-based). Я также установил бэкэнд Django и расширение wsgi_mod. Я просто обслуживаю с localhost для тестирования.
Интерфейс администратора Django (доступен с localhost/admin/
) относится к своему файлу css с относительным URL-адресом, например static/admin/base.css
. Теперь я вижу в своих журналах apache, что браузер пытается получить его по полному URL-адресу localhost/admin/static/admin/base.css
, которого не существует.
У меня создалось впечатление, что относительные пути всегда разрешаются путем добавления их к базовому имени, а не к текущему URL. (Что привело бы к localhost/static/admin/base.css
, где на самом деле находится файл).
Я ошибся (и мои настройки Django перепутаны), или я неправильно настроил свой сервер Apache? Следующим будет мой файл 000 по умолчанию в папке, доступной для сайта:
<VirtualHost *:80>
ServerName localhost
ServerAlias 127.0.1.1
ServerAdmin webmaster@localhost
DocumentRoot "/home/web/http/80/localhost/htdocs"
ErrorLog "/home/web/http/80/localhost/logs/error.log"
CustomLog /home/web/http/80/localhost/logs/access.log combined
LogLevel warn
WSGIScriptAlias / /home/web/http/80/localhost/lib/app.wsgi
Alias /robots.txt /home/web/http/80/localhost/htdocs/robots.txt
Alias /favicon.ico /home/web/http/80/localhost/htdocs/favicon.ico
Alias /images /home/web/http/80/localhost/htdocs/images
Alias /static /home/web/http/80/localhost/htdocs/static
<Directory /home/web/http/80/localhost/htdocs/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Я ничего не менял в apache2.conf, ports.conf, envar или wsgi.conf. В целях тестирования мой файл .htaccess также пуст.
Соответствующая (?) Часть моего settings.py выглядит так:
STATIC_ROOT = '/home/web/http/80/localhost/htdocs/static/'
STATIC_URL = 'static/'
# Additional locations of static files
STATICFILES_DIRS = ()
ROOT_URLCONF = 'osmmap.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'osmmap.wsgi.application'
пока это мой urls.py:
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
url(r'^test/', 'testapp.views.home'),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
У меня создалось впечатление, что относительные пути всегда разрешаются путем добавления их к базовому имени, а не к текущему URL.
Это верно.
(Что привело бы к
localhost/static/admin/base.css
, где на самом деле находится файл).
Это не верный.
Относительные URL-адреса создаются путем удаления всего, что следует за окончательным /
из базового URL, а затем добавив относительный URL. Так http://localhost/admin/
ничего не имеет после финала /
и ничего не лишился бы перед добавлением static/admin/base.css
.
Следовательно, созданный URL http://localhost/admin/static/admin/base.css
построен правильно.
Вам потребуется, чтобы разработчик приложения решил эту проблему.
Вы хотите, чтобы ваш статический путь был относительным к хосту:
STATIC_URL = '/static/'