洞悉互聯網前沿資訊,探尋網站營銷規律
作者:狐靈科技 | 2020-02-07 23:18 |點擊:
很多時候我們使用nginx做偽靜態的時候需要使用目錄形式的URL。這也會出現一些問題,比如帶/斜杠的可以打開 不帶斜杠的就404了。
有時候問了能兼容所有URL,偽靜態就要搞好多。 最近在開發門戶網站 客戶還有靜態網址,偽靜態規則數量已經將近200條。很多用了目錄形式的URL
這里記錄一下一個在URL尾部自動增加斜杠,URL尾部沒有斜杠的自動跳轉到帶斜杠的URL網址。并且不影響其他文件。
往上很多教程是直接 rewrite 跳轉,這樣如果你有其他文件的話也一樣會跳轉。我做了些改進,增加了判斷。可以完美兼容。
規則如下:
if (!-f $request_filename){
rewrite ^(.*[^/])$ $1/ permanent;
}
?
注意將上面三行代碼放到你偽靜態規則的 尾部,這樣不影響已經存在的規則。自己的規則匹配不到的情況下最后才會跳轉。
這樣可以針對目錄 針對html結尾的就不好用了 更好的解決辦法在文末
放的位置如下圖
這樣還會出現一個問題 那就是如果訪問的是html 文件 也會自動加 就變成了
https://www.www.kxlw.net/jzzs/876.html/
這樣也導致網址打不開 因此要加一個判斷 最終使用如下代碼 同樣加在最后面
接下來對這段代碼進行一個解釋:
1、if (-d $request_filename),如果請求的是一個文件夾,則為真,進到if語句中執行
2、rewrite 是執行 url 重寫操作。
3、^/(.*)([^/])$ 表示以/符號開始并緊跟著任何字符,同時不是以/為結束的字符串,在我的url 中,(.*) 表示的 news。
4、http://$host/$1$2/ 表示的重寫后的地址,$host 是請求的域名,$1 是前面第一個括號里的內容,在我的 url 里就是 news。
5、permanent 表示,返回永久重定向的 HTTP 狀態 301。