Apache-2.2

在 apache 中部署工作 django 應用程序的 URL 重定向問題(通過 mod_wsgi)

  • February 23, 2011

我有一個 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 使用者來說,這可能是一件顯而易見的事情,但如果你像我一樣是新手,這會讓你失去一定的時間,因為這是一個很難被發現的問題。

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