微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用.htaccess插入或更新查询参数

如何解决使用.htaccess插入或更新查询参数

我希望对我位于www.mysite.com/nouveauSite/shop.html页面的每次访问都重定向到同一URL,并在查询字符串中添加locale = fr。

我可以看到3种类型的请求:

  1. 没有查询字符串的网址:/nouveauSite/shop.html应该重写为/nouveauSite/shop.html?locale=fr
  2. 具有查询字符串但没有locale参数的网址:/nouveauSite/shop.html?foo=3应该重写为/nouveauSite/shop.html?locale=fr?foo=3
  3. 查询字符串包含locale参数而不是fr的网址:/nouveauSite/shop.html?foo=3&locale=en应该重写为/nouveauSite/shop.html?locale=fr&foo=3

现在我只有2号在工作。 我正在使用此规则:

RewriteCond %{QUERY_STRING} !locale=
RewriteRule ^shop.html     /nouveauSite/shop.html?locale=fr [R,L,QSA]

我认为这条规则:

RewriteCond %{REQUEST_URI} ^/nouveauSite/shop.html
RewriteRule ^shop.html     /nouveauSite/shop.html?locale=fr [R,L]

解决1号问题,但似乎无法解决问题。

我不知道该怎么做3。

解决方法

为此,您需要在.htaccess中有2个重定向规则:

  1. 检查查询字符串中是否不存在locale=查询参数,然后简单地添加带有locale=fr标志的QSA以保留原始查询字符串。
  2. 要检查locale=查询参数是否存在除fr值之外的任何其他参数,我们将不得不用locale=fr替换它。

您可以使用以下2条重定向规则:

RewriteEngine On

# rule #1 when locale= doesn't exist
RewriteCond %{REQUEST_URI} ^/nouveauSite/shop\.html$ [NC]
RewriteCond %{QUERY_STRING} !(?:^|&)locale= [NC]
RewriteRule . %{REQUEST_URI}?locale=fr [R=302,L,QSA]

# rule #2 when locale= exists with anything other than fr
RewriteCond %{REQUEST_URI} ^/nouveauSite/shop\.html$ [NC]
RewriteCond %{QUERY_STRING} ^(.*&)?locale=(?!fr(?:&|$))[^&]*(?:&(.*))?$ [NC]
RewriteRule ^ %{REQUEST_URI}?%1locale=fr%2 [R=302,L]

出于测试目的,我已将R=302保留在这些规则中,然后应将它们更改为R=301,以使其永久重定向。

具有上述规则的测试结果

curl -I 'localhost/nouveauSite/shop.html'
HTTP/1.1 302 Found
Date: Tue,03 Nov 2020 05:38:12 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.4.11
Location: http://localhost/nouveauSite/shop.html?locale=fr
Content-Type: text/html; charset=iso-8859-1


curl -I 'localhost/nouveauSite/shop.html?foo=3'
HTTP/1.1 302 Found
Date: Tue,03 Nov 2020 05:38:40 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.4.11
Location: http://localhost/nouveauSite/shop.html?locale=fr&foo=3
Content-Type: text/html; charset=iso-8859-1


curl -I 'localhost/nouveauSite/shop.html?foo=3&locale=en'
HTTP/1.1 302 Found
Date: Tue,03 Nov 2020 05:40:22 GMT
Server: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.4.11
Location: http://localhost/nouveauSite/shop.html?foo=3&locale=fr
Content-Type: text/html; charset=iso-8859-1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。