如何解决使用.htaccess插入或更新查询参数
我希望对我位于www.mysite.com/nouveauSite/shop.html
的页面的每次访问都重定向到同一URL,并在查询字符串中添加locale = fr。
我可以看到3种类型的请求:
- 没有查询字符串的网址:
/nouveauSite/shop.html
应该重写为/nouveauSite/shop.html?locale=fr
- 具有查询字符串但没有
locale
参数的网址:/nouveauSite/shop.html?foo=3
应该重写为/nouveauSite/shop.html?locale=fr?foo=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]
我不知道该怎么做3。
解决方法
为此,您需要在.htaccess中有2个重定向规则:
- 检查查询字符串中是否不存在
locale=
查询参数,然后简单地添加带有locale=fr
标志的QSA
以保留原始查询字符串。 - 要检查
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 举报,一经查实,本站将立刻删除。