.htaccess:301将“instr”url参数重定向到路径

时间:2016-02-15 11:24:42

标签: apache .htaccess redirect mod-rewrite

通过.htaccess 我想301将URL中的参数“pathval”重定向到“路径”,例如:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

到:

index.php?a=1&b=2&pathval=a_text_string&c=3

甚至更好:

index.php/a_text_string

如果“pathval”是唯一的网址参数,我找到了许多此重定向的解决方案。

但是当QUERY_STRING中包含其他参数所有参数可以按任意顺序可能包含任何参数时,我无法获得它的价值值

所谓可能的电话(1)可能是:

  • index.php?a = 1& b = 2& c = 3(此处不会重定向)
  • 的index.php?pathval = a_text_string
  • 的index.php pathval = a_text_string&安培; A = 1和b = 2和C = 3
  • 的index.php一个= 1和b = 2及pathval = a_text_string和C = 3
  • 的index.php一个= 1&安培; B = 2和C = 3及pathval = a_text_string

如果有人能为所有可想到的案例提供一般解决方案,我会很高兴。

(1):在我的示例中,为了获得更好的可见性,其他参数a,b,c都是数字,但这不是规则。也可能包含字符串或甚至是空的。

1 个答案:

答案 0 :(得分:1)

您可以对问题中描述的所有案例使用此通用规则:

RewriteEngine On

RewriteCond %{THE_REQUEST} \?(.*&)?pathval=([^&]*)&?(\S*)\sHTTP [NC]
RewriteRule ^index\.php$ %{REQUEST_URI}/%2?%1%3 [R=302,NE,L]

要删除&&或引导/尾随&,请使用以下规则:

RewriteCond %{QUERY_STRING} ^&|&&|&$
RewriteCond %{QUERY_STRING} ^&?(.*?)(?:&&(.*))?&?$
RewriteRule ^ %{REQUEST_URI}?%1&%2 [R=302,NE,L]