检查 query_string 是否有值或重定向它
Checking if query_string has a value or else redirect it
我正在学习.htaccess
我的 URL 字符串是
http://abc.bcd.com/company/abc
如果公司名称是 abc、xyz 等并且我的重写规则是
,我确实申请重定向我的页面
RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter= [L,PT]
有时候我的url会变成
http://abc.bcd.com/company/abc?locale=en
什么是查询字符串条件以适应 url 并且应该正常工作?
我已经试过了,但没有帮助。
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
传入的查询字符串部分URL是一个很具体的东西。首先你应该知道经典的 rewriteRules 不管理查询字符串。
因此,例如,您不能创建一个检查查询字符串参数值的重写规则。查询字符串参数可以重复多次,可以以任何顺序出现,并且不被 url 解码(url 的位置部分在 mod_rewrite 时被 url 解码正在处理它)。
这解释了为什么某些 RewriteCond 有时会在 %{QUERY_STRING}
上使用,它不能在 RewriteRule 中完成,但可以在 rewriteCond 中进行测试,所有以前的问题(重复,顺序,url-编码等)。
但一些 rewriteRule
标签可用于查询字符串管理。目前您的标签是 [L,PT]
,也可以写成 [last,passthrough]
。
您可以添加 qsappend
或 QSA
标记,明确告诉 mod_rewrite 将原始查询字符串和生成的查询字符串结合起来。
所以
RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter= [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
您只需在规则中添加 QSA
标志:
RewriteRule ^/?company/(.*)$ /hhhhh/ll/test_page.html?company_letter= [L,QSA]
QSA
(查询字符串追加)标志在添加新参数时保留现有查询参数。
我正在学习.htaccess
我的 URL 字符串是
http://abc.bcd.com/company/abc
如果公司名称是 abc、xyz 等并且我的重写规则是
,我确实申请重定向我的页面RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter= [L,PT]
有时候我的url会变成
http://abc.bcd.com/company/abc?locale=en
什么是查询字符串条件以适应 url 并且应该正常工作?
我已经试过了,但没有帮助。
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
传入的查询字符串部分URL是一个很具体的东西。首先你应该知道经典的 rewriteRules 不管理查询字符串。
因此,例如,您不能创建一个检查查询字符串参数值的重写规则。查询字符串参数可以重复多次,可以以任何顺序出现,并且不被 url 解码(url 的位置部分在 mod_rewrite 时被 url 解码正在处理它)。
这解释了为什么某些 RewriteCond 有时会在 %{QUERY_STRING}
上使用,它不能在 RewriteRule 中完成,但可以在 rewriteCond 中进行测试,所有以前的问题(重复,顺序,url-编码等)。
但一些 rewriteRule
标签可用于查询字符串管理。目前您的标签是 [L,PT]
,也可以写成 [last,passthrough]
。
您可以添加 qsappend
或 QSA
标记,明确告诉 mod_rewrite 将原始查询字符串和生成的查询字符串结合起来。
所以
RewriteRule ^/company/(.*?)$ /hhhhh/ll/test_page.html?company_letter= [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
您只需在规则中添加 QSA
标志:
RewriteRule ^/?company/(.*)$ /hhhhh/ll/test_page.html?company_letter= [L,QSA]
QSA
(查询字符串追加)标志在添加新参数时保留现有查询参数。