代码之家  ›  专栏  ›  技术社区  ›  Hardik Solanki

.htaccess 301将旧url重定向到具有查询字符串问题的新url

  •  1
  • Hardik Solanki  · 技术社区  · 7 年前

    我面临的问题是重定向到新的URL下的URL查询字符串。

    http://www.mywebsite.co.uk/product-category/subcategory/?id=TEST_TS&fromDate=&parts=

    http://www.mywebsite.co.uk/product-category/subcategory/test_ts

    我还需要查询字符串 lowercase 也。

    注意

    • TEST_TS 关键字是第一个查询字符串的值,必须是小写的。
    • 为了 product-category 关键字已修复
    • 为了 subcategory 关键字是动态的[只有字符和字母 a-z A-Z ]
    • For查询字符串必须删除第二个和第三个参数

    我也试过下面的代码 .htaccess 也是,但不是为我工作。

    RewriteRule ^product-category/([a-zA-Z0-9-/+]+)/?id=(.*)$&%{QUERY_STRING}   product-category/([a-zA-Z0-9-/+]+)/{lc:$2$} [L]
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   anubhava    7 年前

    定义这个 RewriteMap 在你的 VirtualHost 分区并重新启动Apache:

    RewriteMap lc int:tolower
    

    然后在站点根目录中。htaccess有以下代码:

    RewriteEngine On
    
    # external redirect from actual URL to pretty one
    RewriteCond %{THE_REQUEST} (/product-category/subcategory)/?\?id=([^\s&]+) [NC]
    RewriteRule ^ %1/${lc:%2}? [R=301,L,NE]
    
    # internal forward from pretty URL to actual one
    RewriteRule ^(product-category/subcategory)/(\w-]+)/?$ $1/?id=$2&fromDate=&parts= [L,QSA,NC]
    

    ${lc:%2} 将在中转换值 %2 小写。