2010-12-17 56 views
0

我想从这个重定向:如何去掉URL的一部分与mod_rewrite的

www.mysite.com/product.html?item=example 

到:

www.mysite.com/example 

我有这样的重写规则在我的.htaccess文件,但它不是没有工作:

RewriteRule ^/product\.html\?item=(.*)$ /$1 [R=301,L] 

任何帮助,非常感谢。

这是我现在有:

RewriteCond %{QUERY_STRING} ^item=(.*)$ 
RewriteRule ^/product\.html$ /%1 [R=301,L] 

这里是最后的结果我得到了在规则的开始摆脱斜线后,在规则的末尾添加一个问号摆脱

RewriteCond %{QUERY_STRING} ^item=(.*)$ 
RewriteRule ^product\.html$ /%1? [R=301,L] 
+0

您不能将查询字符串放在规则的LHS上。 – 2010-12-17 18:55:08

回答

0

因为你是在.htaccess文件,你会想从你的RewriteRule删除开头的斜线:

查询字符串

在参照查询字符串被穿过,该Apache 2.2 documentationmod_rewrite说,这一下:

修改查询字符串

默认情况下,查询字符串加改变地通过 。但是,您可以在包含查询字符串部分的替换字符串 中创建URL。只需在 内使用 替代字符串中的问号表示 以下文字应该是 重新注入到查询字符串中。 如果要删除现有的 查询字符串,请使用问号结束替换 字符串。至 结合新旧查询字符串,使用 [QSA]标志。

因此,当你发现,你只需要在替换后添加一个?

+0

非常感谢你的工作。现在唯一的问题是URL的末尾追加了查询字符串,所以它现在看起来像这样:www.mysite.com/example?item=example如何从最后删除查询字符串? – riellyb 2010-12-17 20:00:42

+0

想通了。只需要添加一个?到重写规则的末尾:RewriteRule^product \ .html $ /%1? [R = 301,L] – riellyb 2010-12-17 20:14:27

+0

好的。我也更新了我的答案。 – 2010-12-17 21:51:50