dedecms构建的网站tag页面如
http://www.aliyun.com/tags.php?/标签/ wp改版后产生大量404,要跳转到
http://www.aliyun.com/tag/标签/
因为tags.php后面有问号,规则【rewrite ^/tags.php?/(.*) /tag/$1 permanent; 】失效。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理包含问号(?)的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
语句可能会导致性能问题或配置难以理解。确保这个解决方案符合你的具体需求,并且在生产环境中实施前进行充分测试。