nginx url 重写规则

nginx url 重写规则

我正在将 WordPress 博客迁移到 Jekyll 博客,使用 NGINX 作为 HTTP 服务器,我不想因为某些 URL 无法正常工作而导致互联网中断。我到了真正需要寻求帮助的地步。

原始的 WordPress 博客 URL 如下:

example.com/series/

example.com/series/some-stuff/

我想通过删除文件扩展名 (.html) 来模仿此 URL,如果有人将 WordPress URL 存储在他的书签中,则使用非 404 页面进行响应。没有任何重写的 Jekyll 默认 URL 如下:

example.com/series/ --> This one is correct by default.

example.com/series/some-stuff.html --> Not ok.

如您所见,第一个 URL,series 部分已经没问题了,因为它是 index.html 页面,并且 Jekyll 在这种情况下会隐藏文件名(如预期的那样),但是当您访问同一部分(/series)中的任何其他页面时,您将获得带扩展名的完整文件名。好的,因此,我开始重写以删除扩展名,并能够响应相同的 wordpress URL,并得到这里:

rewrite ^/series/(.*)\.html*$ /series/$1 permanent;
rewrite ^/series/(.*)/$ /series/$1 permanent;

example.com/series/重定向至example.com/series/index --> It's working ok but I don't like that now it's showing me the file name (index).

其余的都按我预期的方式工作并且响应旧的 WordPress URl。

example.com/some-stuff.html重定向至example.com/series/some-stuff --> Correct!

example.com/series/some-stuff/重定向至example.com/series/some-stuff --> Correct!

如您所见,我设法使这些 URL 正常工作,但除了将文件名(索引)添加到主系列页面之外。我要做的是修复我“破了”重写后保留其他内容(example.com/series/index),重写后保留其他内容。谢谢!

编辑:

我尝试重写一下以example.com/series/index完成此操作:

rewrite ^/(series/index.html$|series/index$) /series/ permanent;

但它没有起作用,我得到的只是 404。

我也尝试对该 URL 进行操作location + alias,但同样得到了 404。

答案1

问题的格式很差,内容有明显的错误,行间不一致,并且省略了其他相关的重写规则以阐明完整的画面,所以我不确定是否可以提供正确的答案。

然而,一般的想法是,一方面,重写permanent和重写(将 URL 重写为用户可见)与内部重写(在服务器内部重写 URL )之间存在差异。redirect

因此,您真正想要的是将用户可见的 URL 内部重写为实际的内部内容。可能是这样的,并删除任何其他重写/series/index

rewrite ^/series/$ /series/index last;
if ($request_uri = /series/index) {  return 301 /series/;  }

相关内容