将带有查询字符串的 URL 重定向到新的 "pretty" URL 以避免重复内容

Redirect URL with query string to new "pretty" URL to avoid duplicate content

什么是最好的 .htaccess 重写代码来强制URL像这样

https://www.example.com/index.php?page=report/tinytoes_mothercare

到那个?

https://www.example.com/report/tinytoes_mothercare

我的网站已经解析 https://www.example.com/report/tinytoes_mothercare,所以我想避免任何与上面丑陋和糟糕的 URL 重复的内容。

您可以在 .htaccess 文件的顶部执行类似以下操作, 现有 rewrite 之前(即"resolves" pretty URL) 将带有查询字符串的旧 URL 重定向到新的 pretty URL.

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^page=([\w/-]*)
RewriteRule ^index\.php$ /%1 [QSD,R=302,L]

检查 REDIRECT_STATUS 环境变量的第一个条件确保我们不会通过重定向重写的 URL 获得重定向循环。 REDIRECT_STATUS 初始请求为空,因此仅重定向来自客户端的直接请求。

第二个条件从查询字符串pageURL参数中获取必要的值。这匹配字符 a-zA-Z0-9_(下划线)、/(斜杠)和 -(连字符)- 如你的例子 URL。如果您需要匹配更多变体,则字符 class 将需要扩展。然后使用 %1 反向引用在 RewriteRule substitution 字符串中使用此值。

请注意,这是一个 302(临时)重定向。只有在您确定它可以正常工作时才更改为 301(永久),以避免缓存问题。