example.com/username
からInstagramディープリンクinstagram://user?username=anyusername
にリダイレクトしようとしています
ここに私のhtaccessコードがあります
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^(www\.)? example\.com$ [NC]
RewriteRule ^ instagram://user?username=%{REQUEST_URI} [R=301,L,NE]
ただし、http://example.com/instagram://user?username=/instagram://user
にリダイレクトします
RewriteCond %{HTTP_Host} ^(www\.)? example\.com$ [NC] RewriteRule ^ instagram://user?username=%{REQUEST_URI} [R=301,L,NE]
Aside:に誤りがありますスペースにCondPatternにRewriteCond
ディレクティブがあります。これにより、すぐに500エラーが発生します。したがって、実際のコードには存在せず、(何らかの形で)質問のタイプミスに過ぎないと思いますか? ^(www\.)?example\.com
を読み取る必要があります(末尾の$
を削除すると、ディレクティブはドットで終わる完全修飾ホスト名に一致するようになります)。
しかし、あなたが見つけているように、これはとにかく意図したとおりにリダイレクトしません。 mod_rewrite(特にApacheではなくmod_rewrite)は、substitutionでscheme(存在する場合)を検証します。 事前定義されたスキームの短いリスト のいずれでもなく、スラッシュで始まらない場合、relative URLとして認識されます。 mod_rewriteは、リクエストのスキームとホスト名にプレフィックスを付けて、不正なリダイレクトを発生させます。
(また、REQUEST_URI
サーバー変数に由来するユーザー名にスラッシュプレフィックスを必要としないと思います。)
代わりに、mod_alias RedirectMatch
ディレクティブを使用できます。これは、スキームを検証せず、記述されたとおりにURLを送信します。例えば:
RedirectMatch 302 /(.+) instagram://user?username=$1
ただし、mod_rewriteで行っていたように、これはリクエストのホスト名をチェックしません。それは要件でしょうか?この1つのアカウントに複数のドメインがありますか?
また、そのようなURLは、それが懸念される場合、おそらくデスクトップブラウザーによって認識されません。
参照:
ディレクトリインデックスに問題がある場合は、次の関連する質問も参照してください。
私のウェブサイトはInstagramアプリの「index.php」アカウントにリダイレクトし続けます