开发者社区 问答 正文

nginx【/tags.php?/标签/】301跳转到【/tag/标签/】的rewrite规则怎么写


dedecms构建的网站tag页面如 http://www.aliyun.com/tags.php?/标签/  wp改版后产生大量404,要跳转到 http://www.aliyun.com/tag/标签/


因为tags.php后面有问号,规则【rewrite ^/tags.php?/(.*) /tag/$1 permanent; 】失效。

展开
收起
林文 2015-07-10 05:18:00 8026 分享 版权
阿里云 AI 助理回答

在处理包含问号(?)的URL重写时,传统的Nginx rewrite规则可能不会按预期工作,因为问号后面的部分通常被视为查询字符串,并非路径的一部分。对于基于Dedecms构建的网站,想要将包含问号的tag页面URL重定向到新的无问号格式,你需要调整Nginx配置以正确处理查询字符串。

一个可行的方法是使用if条件和$arg_参数名来捕获并重用查询字符串中的值。下面是一个示例配置,展示如何实现你所需的重定向:

location /tags.php {
    if ($args ~ "^/([^/]*)") {
        set $tag_path $1;
        return 301 /tag/$tag_path$is_args$args;
    }
}

这段配置的工作原理如下: - location /tags.php 定义了当请求以/tags.php开头时应用的上下文。 - if ($args ~ "^/([^/]*)") 检查查询字符串($args)是否匹配期望的模式,即以斜杠开始后跟非斜杠字符的一段。这里我们假设标签直接跟在问号后面,并且没有其他查询参数。如果匹配成功,它会捕获这部分为$tag_path。 - set $tag_path $1; 将匹配到的标签部分赋值给变量$tag_path。 - return 301 /tag/$tag_path$is_args$args; 执行301永久重定向,目标URL由新路径/tag/加上捕获的标签路径$tag_path构成。$is_args$args用于保留原URL中可能存在的其他查询参数(尽管你的例子中似乎没有额外参数)。

请注意,虽然这种方法可以解决特定问题,但在Nginx配置中过度使用if语句可能会导致性能问题或配置难以理解。确保这个解决方案符合你的具体需求,并且在生产环境中实施前进行充分测试。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答