Nginx 重写:将 - 替换为 /

Nginx 重写:将 - 替换为 /

我建立了幽灵博客平台。它不允许在文章链接中插入“/”符号,但我希望它们出现在我的链接中,所以我希望使用 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;
}

相关内容