我正在制作一個鏈接縮短器。我以前遇到過 URL 問題,但是在將 URL 放入資料庫時??通過對 URL 進行編碼得到了修復,并且在重定向時它將解碼 URL 并重定向到它。問題是,不是將我重定向到https://google.com,而是將我重定向到 mypage.com/google.com。我嘗試制作一個“除錯”頁面,當它只解碼 URL 并且 URL 很好,帶有 HTTPS:// 和所有內容時。最大的問題是它都可以在本地主機上運行,??但是當我將它部署到我的 VPS 上時,它卻無法運行。只有解碼 URL 的除錯頁面才有效。我正在使用 express.js 和貓鼬。這是我重定向用戶的代碼:
app.get('/:shortUrl', async (req, res) => {
const shortUrl = await shorturl.findOne({ short: req.params.shortUrl })
if (shortUrl == null) {
res.send('URL not found!')
} else {
shortUrl.clicks
shortUrl.save()
res.redirect(decodeURIComponent(shortUrl.full))
}
})
uj5u.com熱心網友回復:
您可以使用內置URL物件來確保重定向 URL 完整且有效:
res.redirect(new URL(decodeURIComponent(shortUrl.full)).toString())
如果無法從輸入中生成有效的 URL,它將拋出,因此最好將其包裝在 try/catch 中。
try {
res.redirect(new URL(decodeURIComponent(shortUrl.full)).toString());
} catch (e) {
res.send('Invalid URL');
}
uj5u.com熱心網友回復:
如果 URL 沒有方案,則在瀏覽器中它假定方案是 HTTP,但在 HTTP 重定向中,域看起來像帶點的路徑。如果你重定向到一個路徑,它將重定向到同一個域,這解釋了google.com.
嘗試規范化 URL 或驗證包含方案的完整 URL。
https://github.com/sindresorhus/normalize-url
https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398807.html
標籤:javascript 接口 表达 猫鼬 解码
上一篇:無法讀取未定義地圖的屬性
下一篇:播放YouTube視頻直到完成
