Назад | Перейти на главную страницу

Apache: относительные пути добавляются к текущему URL-адресу вместо добавления к базовому имени

Я новичок в веб-серверах, поэтому будьте осторожны:

Я установил новый сервер 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/'