检查query_string是否有值,否则重定向它

时间:2015-02-02 03:24:19

标签: apache .htaccess redirect

我正在学习.htaccess
我的网址字符串是

http://abc.bcd.com/company/abc

如果公司名称是abc,xyz等我申请重定向我的页面,我的重写规则是

RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter=$1    [L,PT]

有时我的网址会改为

http://abc.bcd.com/company/abc?locale=en

什么是查询字符串条件以容纳这两个网址并且应该正常工作?

我试过这个但没有帮助。

RewriteCond %{QUERY_STRING} ^locale=(.*)$

重写条件应该对我有帮助

if(locale="something")
  /hhhhh/ll/test_page.html?company_letter=abc&locale=something
else
  /hhhhh/ll/test_page.html?company_letter=abc

2 个答案:

答案 0 :(得分:1)

传入URL的查询字符串部分是一个非常具体的事情。首先,您应该知道经典的rewriteRules不管理查询字符串。

因此,例如,无法通过检查查询字符串参数值来创建RewriteRule。查询字符串参数可以重复多次,可以按任何顺序出现,并且不进行url解码(当mod_rewrite对其进行处理时,url的位置部分是url解码的。)

这解释了为什么有些RewriteCond有时用在%{QUERY_STRING}上,它不能在RewriteRule中完成,但可以在rewriteCond中测试,包含所有先前的probelsm(重复,顺序,url编码等)。< / p>

但是一些rewriteRule标签可以应用于查询字符串管理。目前,您的代码为[L,PT],也是有效的[last,passthrough] 您可以添加qsappendQSA标记,该标记明确告诉mod_rewrite将原始查询字符串与生成的查询字符串组合在一起。

所以用

RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter=$1    [last,passthrough,qsappend]

此:

http://abc.bcd.com/company/abc

将转到

/hhhhh/ll/test_page.html?company_letter=abc

而且:

http://abc.bcd.com/company/abc?locale=en

将转到

/hhhhh/ll/test_page.html?company_letter=abc&locale=en

答案 1 :(得分:1)

您只需在规则中添加QSA标记:

RewriteRule ^/?company/(.*)$ /hhhhh/ll/test_page.html?company_letter=$1 [L,QSA]

QSA(查询字符串追加)标志在添加新查询参数时保留现有查询参数。