1

私はサイトを持っており、月刊ニュースレターを送信しています。ニュースレターの購読および購読解除機能は、別のドメインで管理されます。

ただし、ニュースレターのフッターを「きれい」に保つために、購読解除リンクがメインドメインを示していることをお勧めします。

SO:ニュースレターのフッターからこのリンクをたどる:

http://maindomain.com/?email=some@email.com

しかし、本当に必要です:

http://maindomain.com/?noemail=some@email.com

ユーザーを次の場所にリダイレクトします:

http://listdomain.com/members/?p=blacklist&email=some@email.com

これは可能ですか?

私はどのように理解しようと奮闘してきました:

RewriteRule ^(I HAVE NO IDEA*)$ /?email=$1&rewrite [L]
RewriteCond %{QUERY_STRING} email=(I HAVE NO IDEA*)$
GO TO THE OTHER URL SOMEHOW

などなどですが、私は無知で、一日中読んでいます。

この老犬を教えてくれてありがとう...

私は近づいているかもしれませんが、助けが必要です:

RewriteCond %{QUERY_STRING} ^email=([^&]+)(&|$) [NC]
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist&email=%1? [R=301,L] 

私はこれを試しましたが、うまくいきましたが、「最良の」方法ではないかもしれません。

RewriteCond %{QUERY_STRING} ^((?<!email=).*@.*)$
RewriteRule ^$ http://listdomain.com/members/?p=blacklist&%{QUERY_STRING} [R=301,L]

上記はメールクエリで機能しますが、元のクエリの「no​​email」を「email」に書き直す必要があります。

4

1 に答える 1

1

[QSA]既存のクエリ文字列をリダイレクトに追加するには、フラグ(クエリ文字列append)を追加するだけです。追加したパラメータの後にITを追加する必要があります(p=blacklist

RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA] 

Apache mod_rewriteドキュメントから:

デフォルトでは、クエリ文字列は変更されずに渡されます。ただし、クエリ文字列部分を含む置換文字列にURLを作成することはできます。置換文字列内で疑問符を使用するだけで、次のテキストをクエリ文字列に再挿入する必要があることを示します。既存のクエリ文字列を消去する場合は、疑問符だけで置換文字列を終了します。新しいクエリ文字列と古いクエリ文字列を組み合わせるには、[QSA]フラグを使用します。

アップデート:

email =が存在する場合にのみこれが発生する必要がある場合:

RewriteCond %{QUERY_STRING} email=(.+)
RewriteRule ^abc$ http://listdomain.com/members/?p=blacklist [R=301,L,QSA] 

アップデート2:

これをすべて理解した場合は、それをキャプチャしてinにnoemail渡します。に書き換えるには、パラメータをキャプチャする必要です。email=listdomain.comemailnoemailRewriteCond

# capture email into %1
RewriteCond %{HTTP_HOST] ^maindomain.com$
RewriteCond %{QUERY_STRING} noemail=([^&]+)
RewriteRule ^$ http://listdomain.com/members/?p=blacklist&email=%1 [R=301,L]
于 2012-07-28T13:40:56.440 に答える