在 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”根。從首頁面模板到views.py 中通過urls.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 不存在。
阿帕奇錯誤日誌:
[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/
我已經用了2天多了,有人可以幫忙嗎?
最後我發現了錯誤。它沒有連接到 httpd.conf 文件,而是連接到如何將 URL 指定到 django urls.py 文件和模板。
當我以這種方式安裝 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 使用者來說,這可能是一件顯而易見的事情,但如果你像我一樣是新手,這會讓你失去一定的時間,因為這是一個很難被發現的問題。