HTaccess在URL开头删除查询字符串

时间:2011-04-02 16:34:19

标签: .htaccess mod-rewrite rewrite

我正在使用目前不适用于非友好网址的翻译系统,例如

/index.php&option=com_virtuemart&page=shop.browse&category_id=&product_type_id=1&product_type_1_Height_comp=find_in_set_any&product_type_1_Height[0]=Short+%28up+to+80cm%29&product_type_1_Strain_comp=find_in_set_any&product_type_1_Strain[0]=Asia-Central&product_type_1_Yield_comp=find_in_set_any&product_type_1_Yield[0]=High

所以我添加了:

RedirectMatch 301 /es/(.*)index.php(.*)$ http://www.seed-city.com/$1

...进入我的 .htaccess 文件以重定向到英文版。但是,在重定向到英文版后,它会将?lang=es&url=添加到URL的前面,我希望能够将其删除。它也可以是?lang=fr&url= ?lang=de&url= ?lang=zh-CN&url=等。

我尽可能多地想到了,但我无法成功删除它。感谢您的时间和任何帮助将不胜感激。谢谢,Natastna2。

编辑:

@vbence感谢您的回复。我想拿这个网址:

http://www.seed-city.com/?lang=es&url=index.php&option=com_virtuemart&page=shop.browse&category_id=&product_type_id=1&product_type_1_seed_type_comp=find_in_set_any&product_type_1_seed_type[0]=Regular&product_type_1_indoor_flowering_time_comp=find_in_set_any&product_type_1_indoor_flowering_time[0]=Medium+%2856+to+90+days%29&product_type_1_Outdoor_harvest_time_comp=find_in_set_any&product_type_1_Outdoor_harvest_time[0]=Middle+of+September

并将其更改为:

http://www.seed-city.com/index.php&option=com_virtuemart&page=shop.browse&category_id=&product_type_id=1&product_type_1_seed_type_comp=find_in_set_any&product_type_1_seed_type[0]=Regular&product_type_1_indoor_flowering_time_comp=find_in_set_any&product_type_1_indoor_flowering_time[0]=Medium+%2856+to+90+days%29&product_type_1_Outdoor_harvest_time_comp=find_in_set_any&product_type_1_Outdoor_harvest_time[0]=Middle+of+September

从头开始删除?lang=es&url=。这是因为现在,如果有人点击一次西班牙语翻译按钮,它会重定向到英文版,因为它符合我以前的规则:

RedirectMatch 301 /es/(.*)index.php(.*)$ http://www.seed-city.com/$1

但是,如果他们点击一次,则网址现在以?lang = es& url =开头,因此与我以前的规则不匹配。在他们第二次点击翻译标志时,他们将被带到错误页面而不是我希望的英文版本。这就是我试图从URL前面删除查询的原因。生成的URL应该没有语言标识符,因为它是英语默认语言。谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

如果您想隐藏lang=foo并模拟/foo/index.php这样的目录,则可以改用此规则:

RewriteRule ^([a-z-]+)/index.php index.php?lang=$1 [QSA,L]

请注意,我假设您在.htaccess文件中使用此规则。在apache配置中,网址将以/开头,因此您必须在^字符之后添加。