uniapp開發(fā)移動(dòng)端APP禁谦、小程序已經(jīng)非常流行遥皂。有時(shí)候我們需要通過uniapp打包生成H5/wap版本讓H5功能能同步APP小程序的功能,而不是重新寫一個(gè)端的功能模塊代碼庭猩。但是發(fā)現(xiàn)在開發(fā)H5版本中录肯,我們的頁面訪問路徑都會(huì)帶上一個(gè)“#”號优炬,例如:https://h5.shopwind.net/#/pages/index/index , 這個(gè)不僅影響美觀单寂,還會(huì)在某些場合被過濾到“#”號導(dǎo)致路由錯(cuò)誤尊沸,比如我們在做H5端的微信公眾號登錄的時(shí)候,返回地址帶有“#”號就會(huì)被自動(dòng)過濾掉蜡镶,導(dǎo)致無法回調(diào)到正確頁面望伦,解決辦法如下:
一、使用Hbuilder 工具打開manifest.json 文件,定位到:H5配置->路由模式->選擇 history 模式
這時(shí)您會(huì)發(fā)現(xiàn)打開頁面后,已經(jīng)去掉了了“#”號眼滤,且能正常訪問,但是當(dāng)我們刷新頁面后,卻報(bào)了“404”錯(cuò)誤般此, 我們睜大眼睛仔細(xì)檢查是不是網(wǎng)址錯(cuò)了,發(fā)現(xiàn)網(wǎng)址并沒有錯(cuò)!丑慎! 這就奇怪了!
不急,要解決上面這個(gè)問題矫户,你需要了解下面的內(nèi)容:
1)hash ——即地址欄URL中的#符號耻台。 hash 雖然出現(xiàn)URL中畅厢,但不會(huì)被包含在HTTP請求中浦楣,對后端完全沒有影響,因此改變hash不會(huì)重新加載頁面咪辱。
2)history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法振劳。需要特定瀏覽器支持 history模式,會(huì)出現(xiàn)404 的情況油狂,需要后臺配置历恐。
3)hash模式下寸癌,僅hash符號之前的內(nèi)容會(huì)被包含在請求中,如 https://www.shopwind.net, 因此對于后端來說弱贼,即使沒有做到對路由的全覆蓋蒸苇,也不會(huì)返回404錯(cuò)誤;
4)history模式下吮旅,前端的url必須和實(shí)際向后端發(fā)起請求的url 一致溪烤,如https://www.shopwind.net/a/ 。如果后端缺少對/a 的路由處理庇勃,將返回404錯(cuò)誤
二檬嘀、服務(wù)器配置
打包好H5代碼上傳到服務(wù)器還需要做偽靜態(tài)的配置。
history模式下配置nginx
location / {
try_files $uri $uri/ /index.html;
}
history模式下配置Apache
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]