我有一个关于重定向的问题我想重定向到example.com/12321.html到example.com?p=12321。
我是url typle之前的用户,就像我将系统更改为seo url并将内容名称改为url后的第一个数字。现在我邀请最佳系统重定向到?p =
首先我尝试更改.htaccess无法正常使用此代码
RewriteEngine On
RewriteRule "^([0-9]+)+[^.html]" "https://www.example.com?p=$1"
比起nginx在nginx服务器块上编写代码
rewrite ^([0-9]+)+[^.html] https://www.example.com/$1 redirect;
我不明白这就是为什么不工作,我已经在显示在那里工作的https://regex101.com/r/pimHGN/1检查了。
答案 0 :(得分:2)
好的,作为一个快速检查,您可以尝试像Apache的以下正则表达式:
// menu is the end point of my interactive messages
app.post('/menu', (req, res) => {
console.log('from form submission:', req.body.payload)
res.sendStatus(200);
})
对于Nginx来说是这样的:
RewriteRule ^/([0-9]+)\.html$ https://www.example.com?p=$1 [L,R=301]
这应匹配由数字rewrite ^/([0-9]+)\.html$ https://www.example.com?p=$1 permanent;
和0-9
组成的任何页面。
您发布的规则在.html
部分不匹配,这可能就是它无法正常工作的原因。
答案 1 :(得分:1)
不太清楚您要尝试做什么,但是,除非您的rewrite
规则首先从/
移除$uri
,否则您的规则{{1永远不会匹配,因为rewrite ^([0-9]+)+[^.html] https://www.example.com/$1 redirect;
不可能不以$uri
开头,因此/
永远不会抓到任何东西。 (另外,^([0-9]+)
看起来也很可疑 - 我觉得它不会按照你的预期行事。)
正确的方法可能是:
[^.html]
但是,根据nginx redirect loop, remove index.php from url并且相关,以下“循环”可能是您真正想要的:
rewrite ^/([0-9]+)\.html$ /?p=$1 redirect;
上面的代码将确保if ($request_uri ~ ^/?p=([0-9]+)) {
return 302 /$1.html
}
rewrite ^/([0-9]+)\.html$ /?p=$1;
样式仅在nginx和后端内部使用,而在外部,所有内容总是被重定向到/?p=
样式页面并从中提供。 / p>