Dot-Htaccess

如果參數值不是葡萄牙語-pt,.htaccess 重定向(僅強制 WHMCS 一個 LANG)

  • October 9, 2022

我需要幫助將具有多種語言程式碼的 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 參數,請不要執行任何操作。

我的 .htaccess 文件路徑在 cp 文件夾中。我有很多文件,比如 home.php 和 cart.php。我需要這個用於任何網址

要對任何 URL 路徑進行操作,您可以/cp/.htaccess使用 mod_rewrite 在文件頂部附近執行以下操作:

RewriteEngine on

RewriteCond %{QUERY_STRING} ^(.*&)?(language=)(?!portuguese-pt(?:&|$))[^&]*(&.*)?$
RewriteRule ^ %{REQUEST_URI}?%1%2portuguese-pt%3 [NE,R=302,L]

RewriteRule 模式 ^對於任何 URL 路徑都是成功的。

前面的條件RewriteCond指令)匹配查詢字元串。僅當languageURL 參數存在但不等於portuguese-pt(由負前瞻確定)時才成功。language否則將丟棄 URL 參數的值。

我們擷取圍繞languageURL 參數的查詢字元串部分。這些保存在以下反向引用中:

  • %1/ 模式- URL 參數之前(.*&)?查詢字元串部分(如果有)。這包括URL 參數之前的分隔符。language``&``language
  • %2/pattern (language=)- 擷取文字文本language=。這必須匹配才能成功。這只是節省了以後的重複。
  • %3/ 模式- URL 參數(如果有)之後(&.*)?查詢字元串部分。這包括URL 參數後的分隔符。language``&``language

替換字元串中的REQUEST_URI伺服器變數包含完整的根相對 URL 路徑。我們使用上面解釋的反向引用重建查詢字元串,將其作為 URL 參數的值注入(替換此 URL 參數可能具有的任何其他值)。portuguese-pt``language

需要( ) 標誌來防止NE(URL 參數分隔符)在響應中被 URL 編碼。noescape``&

首先使用 302(臨時)重定向進行測試以避免潛在的記憶體問題,即使您稍後將其更改為永久重定向。

引用自:https://serverfault.com/questions/1112600