【发布时间】:2012-05-24 11:04:57
【问题描述】:
每个 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/ 等经典网址按预期工作。
问题出在哪里?这是我不知道/不认识的 apache 行为吗?是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 conf 是什么样的?
-
我忘记了 vhost conf 不是那么“标准”.. 谢谢。
标签: python django apache url routing