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

时间:2018-08-03 11:16:15

标签: .htaccess redirect url-rewriting

我面临将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-zA-Z]
  • 对于查询字符串,必须删除第二个和第三个参数

我也尝试过使用.htaccess中的以下代码,但不为我工作。

RewriteRule ^product-category/([a-zA-Z0-9-/+]+)/?id=(.*)$&%{QUERY_STRING}   product-category/([a-zA-Z0-9-/+]+)/{lc:$2$} [L]

1 个答案:

答案 0 :(得分:2)

在您的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中的值转换为小写。