检查 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]
您可以添加 qsappendQSA 标记,明确告诉 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(查询字符串追加)标志在添加新参数时保留现有查询参数。