我有一个相当旧的siye问题。我有一些通用的URL的查询字符串,我想301重定向,但我不想毯子重定向的URL。我想选择每个查询字符串被重定向的地方,因为网站内有很多不同的类别。例如:
我想改变:
index.php?_a=viewCat&catId=199
:
/garden-furniture/patio-furniture/garden-benches-garden-seats/cat_199.html
但是我想把另一个标题改为我选择的另一个URL,完全不同的结构。问题是我的代码,如果我没有?在目标url的末尾,它工作,但是将查询字符串附加到末尾,如果我把它放在末尾,它根本不会重定向。
我使用的代码:
RewriteCond %{QUERY_STRING} ^_a=viewCat&catId=199
RewriteRule ^index.php$ /garden-furniture/patio-furniture/garden-benches-garden-seats/cat_199.html? [L,R=301]
任何帮助将不胜感激!
编辑:剩下的我的htaccess
RewriteEngine On
RewriteRule ^conservatory/(.*)$ /conservatory-furniture/$1 [R=301,L]
RewriteRule ^dining-room/(.*)$ /dining-room-furniture/$1 [R=301,L]
RewriteRule ^garden/(.*)$ /garden-furniture/patio-furniture/$1 [R=301,L]
RewriteBase /
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule cat_([0-9]+)(.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&catId=$1&%1 [NC]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule prod_([0-9]+)(.[a-z]{3,4})?$ index.php?_a=viewProd&productId=$1&%1 [NC]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule info_([0-9]+)(.[a-z]{3,4})?$ index.php?_a=viewDoc&docId=$1&%1 [NC]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule tell_([0-9]+)(.[a-z]{3,4})?$ index.php?_a=tellafriend&productId=$1&%1 [NC]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule _saleItems(.[a-z]+)?(?.*)?$ index.php?_a=viewCat&catId=saleItems&%1 [NC,L]
如果这些是完整的url,您可以将模式锚定在字符串
的开头RewriteRule ^cat_([0-9]+)(.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&catId=$1&%1 [NC]
这将防止一个包含cat_
的URL被重写为index.php?...
。
由于您没有使用可选的尾随部分,因此您也可以消除
RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1&%1 [NC]
另一点是带有查询字符串的RewriteCond
。如果查询字符串是可选的,则可以删除RewriteCond
并将RewriteRule
修改为
RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1 [QSA,NC]
所有这些都变成
RewriteRule ^cat_([0-9]+) index.php?_a=viewCat&catId=$1 [QSA,NC]
RewriteRule ^prod_([0-9]+) index.php?_a=viewProd&productId=$1 [QSA,NC]
RewriteRule ^info_([0-9]+) index.php?_a=viewDoc&docId=$1 [QSA,NC]
RewriteRule ^tell_([0-9]+) index.php?_a=tellafriend&productId=$1 [QSA,NC]
RewriteRule ^_saleItems index.php?_a=viewCat&catId=saleItems [QSA,NC,L]