【问题标题】:Regular Expression to fix broken URL's in Nginx正则表达式修复 Nginx 中损坏的 URL
【发布时间】:2017-10-15 00:39:13
【问题描述】:

在我以前运行 apache 的服务器上,我有一些 htaccess 规则帮助转发特定模式的 URL,这些模式将 404 提供给固定模式。

很久以前我网站的网址是http://domainname/articlename,然后我将其更改为http://domainname/category/articlename

现在的问题是 google 拥有的旧链接返回 404,我想拦截任何没有类别的 URL 并插入假类别,然后我的 wordpress 安装可以解析 URL。

所以我正在寻找一个解决这个问题的 nginx 解决方案,我认为它会在配置文件中的某个地方使用这个 URL

http://www.criticalhit.net/prey/(给出 404)

并将其更改为

http://www.criticalhit.net/fixed/prey/

然后正确解决。

【问题讨论】:

  • 是文章名称列表还是有规律?您可以将地图用于任意列表。请参阅this answer 获取指导。
  • 有超过 4000 篇文章,所以它是相当的列表。我想要捕捉的模式是任何缺少类别部分且不在我提供的特定列表中的 URL。所以我可以排除某些 URL 获取正在添加的 URL 的中间部分
  • 您可以使用排除 URL 的映射和 if 块返回重写的链接,或为排除的模式构造 locations 并从 location / 块激活重写。跨度>
  • 我很乐意排除我的网址......但是重写和位置块会是什么样子?我对 nginx 很陌生,看不到如何获取缺少中间部分的 URL

标签: wordpress .htaccess ubuntu nginx


【解决方案1】:

使用命名位置来执行重写,尽管这种简单的重写可以使用return 301 有效地完成。

放置一个正则表达式位置(在 PHP 位置块之后)以绕过排除的 URL。这不需要包括由try_files 语句提供的静态文件。

例如:

root /path/to/root;
index index.php;

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    return 301 /category$request_uri;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}
location ~ ^/(category|tags|feeds) {
    try_files $uri $uri/ /index.php;
}

请参阅this document 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多