我建立了幽灵博客平台。它不允许在文章链接中插入“/”符号,但我希望它们出现在我的链接中,所以我希望使用 nginx 重写来修复它们。
浏览器中的链接如下所示:
http://blog.site.com/stuff-life/
我希望它是这样的:
http://blog.site.com/stuff/life/
不言而喻,它应该适用于从“stuff-*”开始的多个链接,而不是一个链接。
我找到了这个,但是对我来说太复杂了:
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
我的配置如下:
server {
listen 80;
server_name blog.site.com;
access_log /var/log/nginx/ghost.log;
error_log /var/log/nginx/ghost.error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}
那么我该如何重写呢?谢谢。
更新。
现在我尝试按照以下方式做:
server {
listen 80;
server_name somesite.com;
access_log /var/log/nginx/ghost.log;
error_log /var/log/nginx/ghost.error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
location /stuff- {
rewrite ^/stuff-(.*) http://$server_name/stuff/$1 permanent;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}
看起来 nginx 正在将重写的链接传递给 ghost。然后我得到了 404 页面。
答案1
答案是:
server {
# <...>
rewrite ^/stuff-(.*) /stuff/$1 permanent;
rewrite ^/stuff/(.*) /stuff-$1;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}
答案2
您还需要确保软件中的链接格式正确。nginx
无法在页面本身中重写链接,您需要以其他方式处理。
但是让nginx/stuff-life
在访问的时候显示出来/stuff/life
可以这样:
location ~ /stuff/(?<part>.+)$ {
rewrite ^ /stuff-$part last;
}