【问题标题】:.htaccess - remove one variable and 301 redirect, but leave others untouched?.htaccess - 删除一个变量和 301 重定向,但不影响其他变量?
【发布时间】:2018-05-25 10:01:38
【问题描述】:

我正在尝试删除一个完整的变量(但前提是它等于 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

如果 page = 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

我尝试了一些建议和搜索,但似乎没有任何效果...

【问题讨论】:

    标签: .htaccess


    【解决方案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]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下内容:

      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 以使重定向永久化。

      【讨论】:

      • 这行得通,但如果任何其他变量发生变化,它就不再起作用了...
      【解决方案3】:

      我在这里找到了解决方案: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]
      

      【讨论】:

        猜你喜欢
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        • 2018-06-17
        • 2012-12-08
        • 2013-09-19
        相关资源
        最近更新 更多