我的foo.js在Django运行服务器中工作,但在Apache(wsgi)中,我得到404.为什么



每个 url 在 Apache 和 django runserver 中都可以正常工作,除了 url(指向视图,而不是真实文件(,如下所示:

foo.js

urls.py:

url(r'^foo.js$', 'myapp.views.foo', name="foo"),

views.py:

def foo(request):
    return HttpResponse("foo")

开发服务器中调用此 url 输出我foo

在带有mod_wsgi的 Apache 中,使用相同的 url,我得到了404

WSGI conf 文件(非常基本(:

import os
import sys, logging
sys.stdout = sys.stderr
path = '/var/www/vhosts'
if path not in sys.path:
   sys.path.insert(0, path)
   sys.path.insert(0, path + '/myapp')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

/foo/这样的经典网址按预期工作。

问题出在哪里?这是我不知道/不认识的阿帕奇行为吗?是 Django 路由吗?

编辑

添加 apache conf 后(感谢您可能明显的提示(,我认为 *.js 上的那些 AliasMatch 是问题所在......我完全忘记了它们!

<VirtualHost *:80>
        DocumentRoot "/var/www/vhosts/myapp"
        ServerName www.myapp.local

    Alias /robots.txt  /var/www/vhosts/myapp/public/static/robots.txt
    Alias /favicon.ico /var/www/vhosts/myapp/public/static/favicon.ico
    AliasMatch ^/([^/]*.css) /var/www/vhosts/myapp/public/static/$1
    AliasMatch ^/([^/]*.js)  /var/www/vhosts/myapp/public/static/$1

    Alias /media/  /var/www/vhosts/myapp/public/media/
    Alias /static/ /var/www/vhosts/myapp/public/static/
    <Directory /var/www/vhosts/myapp>
                Order allow,deny
                Allow from all
        </Directory>
        WSGIDaemonProcess myapp.djangoserver processes=2 threads=15 display-name=%{GROUP}
        WSGIProcessGroup myapp.djangoserver
        WSGIScriptAlias / /var/www/vhosts/myapp/apache/django.wsgi
LogLevel info
</VirtualHost>

您是否设置了Apache来分别在MEDIA_URLSTATIC_URL上提供设置为MEDIA_ROOTSTATIC_ROOT的目录?在开发中,Django 为你提供静态媒体,所以你不需要完整的 Web 服务器堆栈,但在生产中,由你来提供文件。

更新

只需删除AliasMatch行即可。如果您已经为/media/和/static/设置了Alias指令,则不需要它们。所有静态资源都将位于这两个目录之一中。

另外,不要忘记运行python manage.py collectstatic .否则,指定为 STATIC_ROOT 的目录将为空,这显然也会导致 404。

相关内容

最新更新