.htaccess RewriteRuleクエリ文字列を使用して条件を書き換えますが、最終的なURLにクエリ文字列を追加しません

Jun 20 2020

書き換えルールに従う必要があります:

  1. クエリ文字列はchoice1またはchoice2で始まる必要があります
  2. クエリ文字列には、他の値が1つだけ含まれています
  3. ドメインは最終URLのパスである必要があります
  4. 最終的なURLにはクエリ文字列を含めないでください。
  5. 最終的なURLには、パスにクエリ文字列の2つの値が含まれている必要があります

私はこれまでにこれを持っています(ここからの助けを借りて):

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(choice1|choice2)&([^&.]+) [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^\.]+)\..+$ [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3 [L,NE,R=302]

条件は正常に機能します。ただし、最終的なURLには、クエリ文字列の値(%1および%2)は含まれていません。QSA-Flagは使用していませんが、クエリ文字列も追加されています。

いくつかの例:

first-domain.de?choice1&abc => https://www.mysite.de/link/choice1/abc/first-domain
first-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/first-domain
second-domain.de?choice1&ttt => https://www.mysite.de/link/choice1/ttt/second-domain
second-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/second-domain

回答

2 anubhava Jun 20 2020 at 02:35

次のルールを使用できます。

RewriteEngine On

RewriteCond %{QUERY_STRING}#%{HTTP_HOST} ^(choice1|choice2)&([^&#]+)#(?:www\.)?([^.]+)\. [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3? [L,NE,R=302]

使用の理由%{QUERY_STRING}#%{HTTP_HOST}単一の条件では、我々は唯一の最も最近使用できることであるRewriteCond値を捕捉するために%1%2%3など