将带有查询字符串的 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
初始请求为空,因此仅重定向来自客户端的直接请求。
第二个条件从查询字符串page
URL参数中获取必要的值。这匹配字符 a-z
、A-Z
、0-9
、_
(下划线)、/
(斜杠)和 -
(连字符)- 如你的例子 URL。如果您需要匹配更多变体,则字符 class 将需要扩展。然后使用 %1
反向引用在 RewriteRule
substitution 字符串中使用此值。
请注意,这是一个 302(临时)重定向。只有在您确定它可以正常工作时才更改为 301(永久),以避免缓存问题。
什么是最好的 .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
初始请求为空,因此仅重定向来自客户端的直接请求。
第二个条件从查询字符串page
URL参数中获取必要的值。这匹配字符 a-z
、A-Z
、0-9
、_
(下划线)、/
(斜杠)和 -
(连字符)- 如你的例子 URL。如果您需要匹配更多变体,则字符 class 将需要扩展。然后使用 %1
反向引用在 RewriteRule
substitution 字符串中使用此值。
请注意,这是一个 302(临时)重定向。只有在您确定它可以正常工作时才更改为 301(永久),以避免缓存问题。