Apache:相对路径附加到当前 URL 而不是添加到基本名称

Apache:相对路径附加到当前 URL 而不是添加到基本名称

我对网络服务器还不熟悉,所以请温柔一点:

我在 Mint 系统(Ubuntu 基础,也即基于 Debian)上设置了一个新的 apache2 服务器。我还安装了 Django 后端和 wsgi_mod 扩展。我只是为了测试目的而从本地主机提供服务。

Django 管理界面 (可通过 访问localhost/admin/) 引用其 css 文件,其相对 URL 如static/admin/base.css。现在我在 apache 日志中看到浏览器正在尝试使用localhost/admin/static/admin/base.css不存在的完整 URL 来获取它。

我的印象是,相对路径总是通过将其附加到基本名称而不是当前 URL 来解析。(这会导致localhost/static/admin/base.css,即文件实际所在的位置)。

是我的想法错了(我的 Django 设置混淆了),还是我错误配置了我的 apache 服务器?以下是我在 site-enabled 文件夹中的 000-default 文件:

<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)),
)

答案1

您希望您的静态路径与主机相关:

STATIC_URL = '/static/'

答案2

我的印象是,相对路径总是通过将其附加到基本名称而不是当前 URL 来解析。

这是对的。

(这将导致localhost/static/admin/base.css,这也是文件实际所在的位置)。

这是不是正确的。

相对 URL 的构造方法是从基本 URL 中删除 final 后面的所有内容/,然后附加相对 URL。因此http://localhost/admin/final 后面没有任何内容/,在添加 之前也不会删除任何内容static/admin/base.css

因此构造的URLhttp://localhost/admin/static/admin/base.css是正确构造的。

您需要让应用程序开发人员修复此问题。

相关内容