Nginx Rewrite 轉舊網址
Nginx Rewrite 轉舊網址
最近看了一篇如何提升Hexo SEO的文章,就跟著做了一次
其中就將既有的文章網址由 yyyy/mm/dd/title 改為 /title
導致被Google收錄的Cache網址都變成了 404 Not Found
Nginx 與 Apache 處理方式不同
Apache 可以直接將 .htaccess放置在public/中
(.*)
可以變成參數,透過$1, $2, $3… 放置到後面轉址的連結中rewrite第三個參數
有幾種選項可以選
1 | location / { |
參數 | 說明 |
---|---|
permanent | 301 轉址 |
redirect | 302 轉址 |
break | 只會執行第一個 rewrite |
last | 只會執行第一個 rewrite,且會根據新的 rewrite 找尋新吻合的 location |
break 與 last 都只會執行第一個rewrite,之後的將都不會處理
下方參考文章中的 解釋 break 與 last 差異
網站程式碼內容範例複製比較清楚
Example 4: Inside location block - “last”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 last;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed, either!
}
location /documents {
echo 'finally matched location /documents';
}
}last 結果
1
2# curl example.com/test.txt
finally matched location /notesExample 3: Inside location block - “break”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18server {
server_name example.com;
root 'path/to/somewhere';
location / {
echo 'finally matched location /';
rewrite ^/([^/]+.txt)$ /notes/$1 break;
rewrite ^/notes/([^/]+.txt)$ /documents/$1; # this is not parsed
}
location /notes {
echo 'finally matched location /notes';
}
location /documents {
echo 'finally matched location /documents';
}
}break 結果
1
2# curl example.com/test.txt
finally matched location /
參考文章: