我正在学习.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
答案 0 :(得分:1)
传入URL的查询字符串部分是一个非常具体的事情。首先,您应该知道经典的rewriteRules不管理查询字符串。
因此,例如,无法通过检查查询字符串参数值来创建RewriteRule。查询字符串参数可以重复多次,可以按任何顺序出现,并且不进行url解码(当mod_rewrite对其进行处理时,url的位置部分是url解码的。)
这解释了为什么有些RewriteCond有时用在%{QUERY_STRING}
上,它不能在RewriteRule中完成,但可以在rewriteCond中测试,包含所有先前的probelsm(重复,顺序,url编码等)。< / p>
但是一些rewriteRule
标签可以应用于查询字符串管理。目前,您的代码为[L,PT]
,也是有效的[last,passthrough]
您可以添加qsappend
或QSA
标记,该标记明确告诉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
(查询字符串追加)标志在添加新查询参数时保留现有查询参数。