如果参数值不是葡萄牙语-pt,则 .htaccess 重定向(强制 WHMCS 仅使用一种语言)

如果参数值不是葡萄牙语-pt,则 .htaccess 重定向(强制 WHMCS 仅使用一种语言)

我需要帮助将具有多种语言代码的 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 参数的值将被丢弃。languageportuguese-ptlanguage

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(临时)重定向进行测试以避免潜在的缓存问题,即使您稍后将其更改为永久重定向。

相关内容