.htaccess重定向仍然转到404

时间:2016-08-24 16:15:35

标签: regex .htaccess redirect mod-rewrite

我在.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的任何网址重定向到网站中的新网页。域名将保持不变,只是页面名称正在改变。

我在这里做错了什么?

1 个答案:

答案 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是对此捕获组的反向引用。