問題
- 我用ubuntu系統ip:192.168.2.101,安裝nginx作為伺服器。有hugo生成的靜態網站,nginx設定監聽1313埠,用瀏覽器地址http://192.168.2.101:1313是可以正常訪問這個靜態網站的。同時系統內安裝了django專案,django專案用瀏覽器地址http://192.168.2.101也是可以正常訪問的。現在有一個需求,假如django模板檔案中需要做一個連結,點選後可以直接轉入到靜態網站的地址http://192.168.2.101:1313的,這個連結怎麼做?是否還需要其他設定?
- 因為使用proxy_pass只是返回http://127.0.0.1:1313/的內容,而且返回的內容容易出錯,沒有靜態檔案。實際的訪問地址也並未改變,因此我想要的效果是點選連結後,是出現直接的地址跳轉,如何才能實現?
因為使用proxy_pass只是返回http://127.0.0.1:1313/的內容,而且返回的內容容易出錯,沒有靜態檔案。因此我想要的效果是點選連結後,是出現直接的地址跳轉,如何才能實現?
為了實現點選連結後直接跳轉到指定的地址,而不是透過 Nginx 代理,你可以簡單地在 Django 模板中使用絕對 URL 連結。這種方法非常直接,並且不會涉及到任何代理設定。
以下是一些具體的實現方式:
-
直接在 Django 模板中使用絕對 URL:
你可以在 Django 模板中直接編寫一個連結,指向你靜態網站的地址。<a href="http://192.168.2.101:1313" target="_blank">訪問靜態網站</a>
這將使使用者點選連結後,瀏覽器直接跳轉到
http://192.168.2.101:1313
。 -
使用 Django 的
url
模板標籤(如果你想在 URL 中使用動態部分):
如果你希望連結在 Django 中更靈活,可以在urls.py
中定義一個檢視,該檢視只做一個簡單的重定向:你的 urls.py 中 from django.urls import path from django.views.generic import RedirectView urlpatterns = [ # 其他 URL 模式 path('redirect-to-hugo/', RedirectView.as_view(url='http://192.168.2.101:1313'), name='redirect-to-hugo'), ]
然後在你的模板中使用這個 URL:
<a href="{% url 'redirect-to-hugo' %}" target="_blank">訪問靜態網站</a>
-
配置 Nginx 進行重定向:
如果你希望透過 Nginx 實現重定向,而不是內容代理,可以使用return
指令:server { listen 80; server_name example.com; location / { include uwsgi_params; uwsgi_pass unix:/home/lyh/aipw/aipw.sock; } location /stack/ { return 301 http://192.168.2.101:1313/; } }
這種方式會在使用者訪問
http://example.com/hugo/
時,直接重定向到http://192.168.2.101:1313/
,並在瀏覽器位址列中顯示新的 URL。
透過以上方法,你可以實現點選連結後直接跳轉到指定的地址,而不是透過 Nginx 代理內容。