我在.htaccess文件中进行了以下重写,它仍然登陆404而不是重定向。
RewriteCond %{QUERY_STRING} tab=auto_data(.*)$
RewriteRule ^(.*)$ https://test.example.com/automobile-data/ [L,R=301]
有多个页面可能具有tab=auto_data
查询字符串参数,并且很可能还在tab=auto_data
后面附加了其他QSP。
我需要将包含QSP tab=auto_data
的任何网址重定向到网站中的新网页。域名将保持不变,只是页面名称正在改变。
我在这里做错了什么?
答案 0 :(得分:2)
唯一的其他指令是标准的WordPress指令。
在这种情况下,您的外部重定向应该之前任何WordPress路由指令。 RewriteEngine
指令只需要在文件中出现一次,任何地方。虽然如果它出现在顶部,显然更合乎逻辑。
您还需要从替换中删除查询字符串,否则您将获得重定向循环,因为域是相同的。如果域/主机保持不变,则可以从替换中省略。
尝试以下方法:
RewriteCond %{QUERY_STRING} tab=auto_data
RewriteRule ^polk/$ /automobile-data/? [R=301,L]
这只是匹配URL路径/polk/
(如评论中所述),除非这需要更一般? tab=auto_data
必须匹配查询字符串中的任何位置。
替换末尾的?
会删除查询字符串,因此会阻止重定向循环。 (可能应该从目标中删除查询字符串?)尽管源URL和目标URL路径不同,但这不再是必需的。
如果“域保持不变”,则没有特定的需要将方案和主机包含在替换中。除非您托管多个域等?
确保在测试之前清除浏览器缓存,因为301s因缓存而臭名昭着。因此,使用302s进行测试可能更为可取。
UPDATE:要专门删除此查询字符串参数,但将剩余的查询字符串复制到目标上,请尝试以下操作:
RewriteCond %{QUERY_STRING} ^tab=auto_data(?:&(.+))?
RewriteRule ^polk/$ /automobile-data/?%1 [R=301,L]
(?:&(.+))?
- 抓取任何剩余的查询字符串(如果有),但从捕获的组中排除&
前缀(param分隔符)。 %1
是对此捕获组的反向引用。