このようなものが欲しいですか?
RewriteEngine On
RewriteCond %{REQUEST_URI} Special:UserLogin [OR]
RewriteCond %{QUERY_STRING} Special:UserLogin
RewriteCond ?#%{QUERY_STRING} ([^#]+)#([^#]+)
RewriteRule ^ https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://%{SERVER_ADDR}%{REQUEST_URI}%1%2 [L,B,NE]
わかりました、これは少し混乱するように思えるでしょうが、ここで何が起こっているのかを説明します。
Special:UserLogin
がリクエスト URI またはクエリ文字列に含まれているかどうかを確認します。
?
マーク、URI、およびクエリ文字列の後方参照の一致を作成します(これは非常に重要です)。
- リクエストを にリダイレクトします
https://login.security.server.com/test/UI/Login
が、前の条件からの後方参照を使用してパラメーターを作成し、後方参照を URL エンコードするフラグgoto=
を使用します。B
このようにして、結果は、URL エンコードされたクエリ文字列を含む URL 全体になります。(NE
フラグは、%
標識自体が二重にエンコードされないようにするためにあります)。
これらのルールでは、次の要求があります。
/MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page
次の場所にリダイレクトされます。
https://login.security.server.com/test/UI/Login?service=DSSEC&goto=http://123.45.67.89/MyWiki/index.php%3ftitle%3dSpecial%3aUserLogin%26returnto%3dMain_Page
ご覧のとおり、クエリ文字列?title=Special:UserLogin&returnto=Main_Page
は にエンコードされる%3ftitle%3dSpecial%3aUserLogin%26returnto%3dMain_Page
ため、login.security.server.comはそれを独自のクエリ文字列と間違えません。代わりに、ログイン サービスは goto パラメータを次のように認識します。
http://123.45.67.89/MyWiki/index.php?title=Special:UserLogin&returnto=Main_Page
完全に無傷。