Apache-2.2

Apache:相對路徑附加到目前 URL 而不是添加到基本名稱

  • February 11, 2013

我是網路伺服器的新手,所以請溫柔:

我在 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

因此,構造的 URLhttp://localhost/admin/static/admin/base.css構造正確。

您需要讓應用程序開發人員解決此問題。

引用自:https://serverfault.com/questions/477378