Django的PREPEND_WWW加上常見中間件自動將所有根域流量重定向到「www」。域。我如何最好地實現相反?在Django下? Apache的? Ngnix?實現PREPEND_WWW相反的最佳方式(例如,從「www」重定向到根域)?
2
A
回答
3
哪裏可能,你會想在django之外做這種重定向。這裏是關於Nginx和Apache的說明。 (您需要根據需要調整配置non-www
或www
)。
至於爲什麼要在django之外做,答案就是性能。這裏沒有必要讓django處理請求和響應,因爲它可以在請求生命週期的早期完成。這意味着您可以保存您的django進程,以便在實際需要時使用它們。
當您無法訪問服務器配置(例如某些共享主機環境)時,您應該使用PREPEND_WWW
或類似custom middleware的唯一原因。它被用作最後的手段。
1
由於@DanielB在Django之外執行此操作會更好。但是,如果你想在Django中做到這一點(例如你想學習,或者你不關心性能,或者你想測試你的測試服務器是否使用Apache,或者其他什麼),那麼你可以使用這個代碼,我發現here:
class RemoveWwwMiddleware():
def process_request(self, request):
try:
if request.META['HTTP_HOST'].lower().find('www.') == 0:
from django.http import HttpResponsePermanentRedirect
return HttpResponsePermanentRedirect(request.build_absolute_uri().replace('//www.', '//'))
except:
pass
相關問題
- 1. Nginx多個server_names重定向非www的最佳方式。到www
- 2. 將非www重定向到www的最佳方法是什麼?
- 3. 從www重定向。到根域(不含www。)
- 4. 重定向到非www的最佳方式並同時實施SSL
- 5. 301重定向在Passenger(Ruby on Rails)從根域到www子域?
- 6. 從web根目錄和www重定向到指定的子域
- 7. 域名重定向到www
- 8. 重定向域名到www
- 9. 使用ruby on rails將所有頁面從www重定向到根域的最佳方法?
- 10. 重定向鏈接到其他域的最佳方式(條件)?
- 11. .htaccess從子域重定向到www
- 12. 無法實現重定向到www url
- 13. GlassFish將www重定向到非www域
- 14. 301從主域(www和非www)重定向到子域
- 15. 三個域名重定向到主域名最佳實踐apache2
- 16. heroku非www重定向到www域的網絡解決方案
- 17. 使用Intelligencia.UrlRewriter將www子域重定向到根域
- 18. 根據Django中的IP地址(國家)重定向域名的最佳方式
- 19. 如何將根(裸)域重定向到www - heroku和zerigo
- 20. 重定向的最佳方式?
- 21. 管理重定向的最佳方式
- 22. Symfony2 - 從非www到www的重定向
- 23. htaccess的重定向根到www
- 24. 將域重定向到codeigniter上的www
- 25. Opencart的域名重定向到www
- 26. Google App Engine Python Webapp2 301從www重定向到非www域名
- 27. 重定向根域到www在Heroku基於主機名的SSL
- 28. 重定向域,而無需WWW相同的與WWW
- 29. 如何將目錄重定向到子域,並將www子域重定向到非www子域?
- 30. 從www域重定向到根域 - 工作但不完全正確
你會想在django之外做到這一點。 [Nginx](http://stackoverflow.com/a/7958540/766952)和[Apache](http://stackoverflow.com/a/1100363/766952)的說明。 – DanielB
有關完整答案:爲什麼在django之外?除了root-> wwww,還有什麼關於www-> root? – Bryce
爲了節省自己打django的開銷。你必須事先打nginx/apache,他們可以提供請求,而不必讓django處理請求/響應。 – DanielB