.htaccess 中带有查询字符串的 301 的正确语法是啥? [关闭]

Posted

技术标签:

【中文标题】.htaccess 中带有查询字符串的 301 的正确语法是啥? [关闭]【英文标题】:What would the correct syntax be for this 301 with a query string in .htaccess? [closed].htaccess 中带有查询字符串的 301 的正确语法是什么? [关闭] 【发布时间】:2012-12-06 00:20:36 【问题描述】:

我有几个这样的网址:

/news/report_detail.asp?id=100&edition=14

我想在 .htaccess 中添加一个重写,所以它们看起来像这样:

report-detail-asp-id-100-edition-14

任何帮助将不胜感激。

克里斯

【问题讨论】:

当你说“他们看起来像这样”时,你不是指用户的地址栏中,是吗? 肯尼斯:是的,我是。我只需要想出将采用该查询字符串的正则表达式,这样我就可以重定向到 /news/report-detail-asp-id-whatever#-edition-whatever#。我的 cms 系统已经在创建更清晰的别名,我只需要获取 1500 个左右的 url 并重定向它们。 原谅我,但我对 URL 重写的理解是你把干净变成丑陋,而不是反过来。您(或您的 CMS)将向用户输出干净的 URL(即在用户系统上呈现的网页),当用户单击“干净”链接时,重写引擎会拦截请求,并翻译干净的链接到一个丑陋的链接——服务器所期望的。我们还在谈论同一件事吗? 嘿,肯,不完全是。我的困境是我有 1500 个左右的 url,它们是用查询字符串以“丑陋”格式编写的。我不得不在我的 CMS 中使用这些作为标题(我不会重做 1500 个链接)。所以我想做的就是想出一个正则表达式来清理查询并重定向到“干净”的格式。 【参考方案1】:

这应该可行。

RewriteCond %QUERY_STRING id=([0-9]+)&edition=([0-9]+)
RewriteRule news/report_detail.asp news/report-detail-asp-id-%1-edition-%2? [R=301,L]

请注意,我假设这是在您的根文件夹的 .htaccess 文件中,并且您已经有一个 RewriteBase / 指令,并且您从上面的重定向 URL 的开头省略了 news/。否则,您可能需要对此代码进行一些调整。但这会将用户从/news/report_detail.asp?id=100&edition=14 带到/news/report-detail-asp-id-100-edition-14

【讨论】:

Wige..非常感谢..这是处理重定向。我如何将上述内容更改为:/news/report-detail-100-edition-14?只是省略第二行中的 -asp 部分? 或者,这个 url: /news/report_edition.asp?id=59 怎么样?重写为:report-edition-asp-id-59 会起作用。 克里斯托弗,第一个问题,是的。对于第二个,我会简单地创建第二组规则来处理没有指定版本的情况。 感谢 Wige,在您的帮助下,我终于完成了这一切……非常感谢。

以上是关于.htaccess 中带有查询字符串的 301 的正确语法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

301 Htaccess 重写规则查询字符串

301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL

htaccess 301 重定向某些 URL 模式

301 重定向没有子目录/查询字符串

htaccess 重定向附加查询字符串?

RedirectMatch 301 删除查询字符串/URL 参数