在 apache 中部署工作 Django 应用程序时出现 URL 重定向问题(通过 mod_wsgi)

在 apache 中部署工作 Django 应用程序时出现 URL 重定向问题(通过 mod_wsgi)

我有一个 django 应用程序,它在 django 开发服务器下完美运行。我尝试使用 mod_wsgi 在 apache2.2 中部署它,但出现错误。在 httpd.conf 文件中,我使用以下命令将我的应用程序“挂载”在根目录 /myapp 下:

<IfModule wsgi_module>
    WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi
    WSGIScriptReloading On
    WSGIDaemonProcess djangoapps processes=10 threads=1 maximum-requests=500 display-name=my-wsgi
    WSGIProcessGroup djangoapps
</IfModule>

我已按照标准指示准备 django.wsgi。现在,我可以访问我的应用程序的主页模板,但似乎存在重定向错误。ULR 重定向请求中不会自动插入“/myapp”根目录。从主页模板通过 urls.py 向 views.py 中的某些模块发出的请求无法正确传递。

apache 访问日志:

127.0.0.1 - - [21/Feb/2011:16:11:44 +0100] "GET /myapp/ HTTP/1.1" 200 1795  
127.0.0.1 - - [21/Feb/2011:16:11:46 +0100] "GET /api/dir HTTP/1.1" 404 205

“/api/dir”不存在,它应该与 urls.py 中的模式匹配,但 id 不存在。

Apache 错误日志:

[Tue Feb 21 16:11:46 2011] [error] [client 127.0.0.1] File does not exist: /home/my_path_to_django_app_superfolder/api, referer: http://127.0.0.1/myapp/

我已经花了两天多的时间,有人可以帮忙吗?

答案1

最后我找到了错误。它与 httpd.conf 文件无关,而是与 django urls.py 文件和模板中指定 URL 的方式有关。
当我以这种方式挂载 myapp 时:

WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi

我认为 django 模板文件中指定的 URL 应该带有一个起始斜杠,如下所示: '/api/dir'
这样会导致应用程序只能在 django 开发服务器上工作,而不能在 apache 上运行。

相反,如果您使用没有起始斜杠的 URL,例如:
'api/dir'
应用程序在 django 开发服务器和 apache 上都可以正常工作!

即使在 django urls.py 文件的模式匹配中,也必须避免使用起始斜杠:
如下所示:(r'^api/dir$', 'available_services')
而不是如下所示:(r'^/api/dir$', 'available_services')

对于专业的 django 用户来说,这可能是显而易见的事情,但如果你像我一样是新手,这可能会让你浪费一定的时间,因为这是一个很难检测到的问题。

相关内容