Apache:相對路徑附加到目前 URL 而不是添加到基本名稱
我是網路伺服器的新手,所以請溫柔:
我在 Mint 系統(基於 Ubuntu,也意味著基於 Debian)上設置了一個新的 apache2 伺服器。我還安裝了 Django 後端和 wsgi_mod 擴展。我只是出於測試目的從 localhost 提供服務。
Django 管理界面(可通過 訪問
localhost/admin/
)使用相對 URL 引用其 css 文件,例如static/admin/base.css
. 現在我在我的 apache 日誌中看到瀏覽器正在嘗試在localhost/admin/static/admin/base.css
不存在的完整 URL 下獲取它。我的印像是相對路徑總是通過將它們附加到基本名稱而不是目前 URL 來解決。(這將導致
localhost/static/admin/base.css
,這是文件實際所在的位置)。我是不是想錯了(我的 Django 設置混淆了),還是我錯過了配置我的 apache 伺服器?以下是我在啟用站點的文件夾中的 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)), )
您希望您的靜態路徑與主機相關:
STATIC_URL = '/static/'
我的印像是相對路徑總是通過將它們附加到基本名稱而不是目前 URL 來解決。
這是對的。
(這將導致
localhost/static/admin/base.css
,這是文件實際所在的位置)。這是不正確的。
相對 URL 是通過
/
從基本 URL 中剝離最終 URL 之後的所有內容,然後附加相對 URL 來建構的。所以http://localhost/admin/
在決賽之後沒有任何東西,/
並且在添加之前沒有任何東西被剝離static/admin/base.css
。因此,構造的 URL
http://localhost/admin/static/admin/base.css
構造正確。您需要讓應用程序開發人員解決此問題。