这本质上是同一个页面,我只需要从使用 GET 参数的 url 重定向到不带此参数的 url。
RewriteCond %{QUERY_STRING} ^category=([^&]+)&key=news-category$
RewriteRule ^news/$ /news/%1/? [R=301,L]
RewriteCond %{QUERY_STRING} ^category=([^&]+)&key=news-category$ RewriteRule ^news/$ /news/%1/? [R=301,L]
此规则应仅适用于来自客户端的直接请求,而不适用于(通过其他规则)重写的请求 - 这可能是导致重定向循环的原因。您需要在上述规则上添加一个额外的 condition (
RewriteCond
指令)。例如:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
:
此规则也应该出现在
.htaccess
文件中,在其他 重写之前。
此外,如果您使用的是 Apache 2.4,请考虑使用
QSD
(查询字符串丢弃),而不是附加空查询字符串(以便删除原始查询字符串)。 QSD
标志完全删除查询字符串,而尾随的 ?
设置一个空查询字符串,该字符串依赖于用户代理(浏览器)在重定向请求中删除它。
在测试之前清除浏览器缓存,并使用 302(临时)重定向进行测试,以避免潜在的缓存问题。