.htaccess - 删除一个变量和301重定向,但保持其他不变?

时间:2018-05-24 04:08:57

标签: .htaccess

我试图删除一个完整的变量(但只有当它等于1时)。我怎样才能做到这一点?基本上我想删除字符串"& page = 1"。这就是我的意思:

如果页面= 1:

301从BEFORE重定向到AFTER

之前:https://www.fubar.com/search.php?cs=tt&st=ss&page=1

之后:https://www.fubar.com/search.php?cs=tt&st=ss

如果页面= 2或任何其他数字除了1(没有任何更改或转发 - 没有301):

之前:https://www.fubar.com/search.php?cs=tt&st=ss&page=2

之后:https://www.fubar.com/search.php?cs=tt&st=ss&page=2

我已尝试过一些建议和搜索,但似乎没有任何工作......

3 个答案:

答案 0 :(得分:1)

尝试使用以下规则,

RewriteEngine On
RewriteCond %{QUERY_STRING} !page=1$
RewriteRule ^ https://www.fubar.com/search.php?%{QUERY_STRING}&page=1 [R=301,L,END]

RewriteCond %{QUERY_STRING} !page=1$
RewriteRule ^ search.php?%{QUERY_STRING}&page=1 [L]

答案 1 :(得分:0)

您可以使用以下内容:

RewriteEngine on 

# if &page=1
#redirect to remove the &page perm
RewriteCond %{THE_REQUEST} /search\.php\?cs=tt&st=ss&page=1\s [NC]
RewriteRule ^.+$ https://www.fubar.com/search.php?cs=tt&st=ss [NE,L,R]

这会将您的网址从https://www.fubar.com/search.php?cs=tt&st=ss&page=1重定向到相同的网址,但最后没有page参数(例如:https://www.fubar.com/search.php?cs=tt&st=ss)。

请注意,R是302临时重定向标记。我正在使用它来测试规则并避免浏览器缓存。您可以将R更改为R=301以使重定向永久化。

答案 2 :(得分:0)

我在这里找到了一个解决方案:htaccess 301 redirect rule to remove part of a query string from URLs, but leave the rest

这是我最终使用的代码:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&?page=1(.*)$ 
RewriteRule ^/?search\.php$ /search.php?%1%2 [R=301,NE]