htaccess更改url参数

时间:2018-03-19 15:20:45

标签: regex .htaccess

我有一个使用日历插件的WP网站 - 目前日历系统创建的用于更改日历的月视图的网址是一个无法提升日历的月视图的网址...我已经找到了什么是正确的URL应该是 - 但需要一种从错误的网址重定向到正确的网址...

因此...

错误的网址是: / calendar /?date = 2018-04

正确的网址是 / calendar /?tribe-bar-date = 2018-04

所以,我基本上是在寻找一种方法来重定向/重写网址,以便"?date = 2018-04"成为"?tribe-bar-date = 2018-04"记住" ="之后的一年。参数中的元素将一直在变化。所以需要改变" ?date "成为" ?tribe-bar-date " ...

我已经开始使用重定向WP插件,其规则如下:

/calendar/?date=(.*)
/calendar/?tribe-bar-date=(.*)

但它不起作用......不知道为什么......我认为它会,但我不能很好地了解正则表达式!

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试:

RewriteCond %{QUERY_STRING} (?:^|&)date=(.*)$
RewriteRule ^calendar/(.*)$ /calendar/$1?tribe-bar-date=%1 [L,R]

这假设“date”参数将是查询字符串中的第一个参数,否则您可以在前面添加其他分组以尝试捕获它。这是一个302(非永久性)重定向,您可以通过将R更改为R=301来更改它。

确保此规则在任何wordpress规则之前。

答案 1 :(得分:1)

如果您只想在外部重定向,请执行以下操作:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^date=(.+)$
RewriteRule ^calendar/$ /calendar/?tribe-bar-date=%1 [QSD,R=301,L,NE]

或者这个:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(/calendar/)\?date=(.+)\sHTTP.*$
RewriteRule ^         %1?tribe-bar-date=%2 [QSD,R=301,L,NE]

如果它是外部的目标,那么内部到同一路径,请执行以下操作:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(/calendar/)\?date=(.+)\sHTTP.*$
RewriteRule ^         %1?tribe-bar-date=%2 [QSD,R=301,L,NE]
RewriteCond %{QUERY_STRING} ^tribe-bar-date=(.+)$
RewriteRule ^calendar/$ /calendar/?date=%1 [L,NE]

要防止附加查询字符串,您应将?放在RewriteRule替换的末尾

在apache 2.4及更高版本中,您可以通过此标记[QSD] https://httpd.apache.org/docs/2.4/rewrite/flags.html

放弃查询字符串
相关问题