我正在将 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/; }