2012-03-03 47 views
0

我想重定向从/orders/whatever/?n=4

到:

/orders/?shopURL=whatever&n=4 

我设法重定向到正确的目录,但我失去了传递的变量。

这是我目前的规则:

RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L] 

回答

1

如果要执行一个查询字符串的存在,使用方法:

RewriteCond %{QUERY_STRING} (\bn=\d+\b) 
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1&%1 [L] 

否则,您可以使用下面没有的RewriteCond:

RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA] 
+2

除了'(n = \ d *)'也会匹配'ban = 234G'。在这种情况下使用'(\ bn = \ d * \ b)'。 – TerryE 2012-03-03 09:59:07

+0

因为\ d只会匹配数字,所以您最好避免\ b,但将它添加到前面是绝对必要的。我会更新我的答案来使用它。 (我从来没有真正使用\ b之前,无法想象如何防止'禁令'与'n'的情况,所以谢谢指出!) – 2012-03-03 13:26:58

+0

是的,大多数开发人员没有意识到,Apache的正则表达式引擎是**完整的** PCRE实现。所以所有的好东西都像元字符,非贪婪匹配,前瞻/隐藏断言,\ n变量都可以工作。 :-) – TerryE 2012-03-03 14:06:23

0

你重写规则看起来很普通的,因为虽然它会重定向几乎每一页。

对于正则表达式,我不是那么棒,所以我会把这些留给你或其他人。但是,在重写规则末尾需要一些内容来捕获参数,然后将其附加到新URL的末尾。

RewriteRule ^([\w\d]+)/(somethinghere)$ /orders/?shopURL=$1&$2 [L] 
1

QSA标志RewriteRule将保留现有的查询字符串字段。

相关问题