我需要帮助将具有多种语言代码的 URL 重定向到具有 的 URL .htaccess
。以下 URL 应重定向:
https://example.com/cp/cart.php?a=add&pid=7&language=us
https://example.com/cp/cart.php?a=add&pid=5&language=de
https://example.com/cp/cart.php?language=nl
https://example.com/cp/home.php?language=uk&test=a
到
https://example.com/cp/cart.php?a=add&pid=7&language=portuguese-pt
https://example.com/cp/cart.php?a=add&pid=5&language=portuguese-pt
https://example.com/cp/cart.php?language=portuguese-pt
https://example.com/cp/home.php?language=portuguese-pt&test=a
重要:如果 URL 不包含“语言”URL 参数,则不执行任何操作。
答案1
我的 .htaccess 文件路径在 cp 文件夹中。我有很多文件,例如 home.php 和 cart.php。我需要这些文件用于任何 url
/cp/.htaccess
要对任何 URL 路径执行操作,您可以使用 mod_rewrite 在文件顶部附近执行以下操作:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*&)?(language=)(?!portuguese-pt(?:&|$))[^&]*(&.*)?$
RewriteRule ^ %{REQUEST_URI}?%1%2portuguese-pt%3 [NE,R=302,L]
这RewriteRule
图案 ^
对于任何 URL 路径都是成功的。
前面的状况(指令) 与查询字符串匹配。仅当URL 参数存在但不等于(由负向前瞻确定)RewriteCond
时,该指令才会成功。否则,URL 参数的值将被丢弃。language
portuguese-pt
language
language
我们捕获URL 参数周围的查询字符串部分价值。这些保存在以下反向引用中:
%1
/ pattern(.*&)?
- 查询字符串的一部分前URLlanguage
参数(如果有)。这包括URL 参数&
前的分隔符language
。%2
/ 模式(language=)
- 捕获文字文本language=
。必须匹配才算成功。这只是为了省去以后的重复。%3
/ pattern(&.*)?
- 查询字符串的一部分后URLlanguage
参数(如果有)。这包括URL 参数&
后的分隔符language
。
服务器REQUEST_URI
变量代换字符串包含完整的根相对 URL 路径。我们随后使用如上所述的反向引用重建查询字符串,将其portuguese-pt
作为 URL 参数的值注入language
(替换此 URL 参数可能具有的任何其他值)。
需要NE
( )标志来防止(URL 参数分隔符)在响应中被 URL 编码。noescape
&
首先使用 302(临时)重定向进行测试以避免潜在的缓存问题,即使您稍后将其更改为永久重定向。