nginx url重写规则

我正在使用NGINX作为我的HTTP服务器从WordPress博客迁移到Jekyll博客,我不希望因为某些URL不能正常工作而中断互联网。 我到了一个我真的需要求助的地步。

原来的WordPress博客URL是这样的:

example.com/series/

example.com/series/some-stuff/

我想通过删除文件扩展名(.html)来模仿这个url,如果有人将WordPressurl存储在他的书签中,则回复一个非404网页。 没有任何重写的Jekyll默认URL是这样的:

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

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

正如你可以看到第一个URL,系列部分已经确定,因为它是index.html页面,Jekyll在这种情况下隐藏了de文件名(如预期的那样),但是当你访问同一部分(/系列)中的任何其他页面获取扩展名的完整文件名。 好吧,我开始在重写工作中删除扩展名,并能够响应相同的WordPress的url,并在这里:

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

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

其他人正在按我期望的方式工作,并正在响应旧的WordPress URls。

example.com/some-stuff.htmlredirect到example.com/series/some-stuff --> Correct!

example.com/series/some-stuff/redirect到example.com/series/some-stuff --> Correct!

正如你所看到的,我已经设法使这个URL工作,但除了将文件名(索引)添加到主系列页面。 我想要做的就是修改重写后(“ example.com/series/index )的“破坏”的URL,但在重写之后保留原来的URL。 谢谢!

编辑:

我试图做一个重写只为example.com/series/index这样做:

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

但它没有工作,我得到的是404s。

我也试图做一个location + alias为该url,并得到了404也。

这个问题的格式很差,内容上有明显的错误,行之间的不一致以及省略了其他相关的重写规则,使整个和全面的情况都不了了之,所以我不确定能否提供一个正确的答案。

然而,一般的想法是一方面permanent重写和redirect重写有区别,一方面重写URL对用户可见,另一方面内部重写重写URL在服务器本身内。

所以,你真正想要的就是将用户可见的URL内部重写回内部的实际内容。 也许这样的事情,并删除任何其他重写/series/index

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