web-dev-qa-db-ja.com

example.com/usernameをディープリンクから直接開いているInstagramアプリにリダイレクトするにはどうすればよいですか?

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にリダイレクトします

2
Bangladesh 71
RewriteCond %{HTTP_Host} ^(www\.)? example\.com$ [NC]
RewriteRule ^ instagram://user?username=%{REQUEST_URI} [R=301,L,NE]

Aside:に誤りがありますスペースCondPatternRewriteCondディレクティブがあります。これにより、すぐに500エラーが発生します。したがって、実際のコードには存在せず、(何らかの形で)質問のタイプミスに過ぎないと思いますか? ^(www\.)?example\.comを読み取る必要があります(末尾の$を削除すると、ディレクティブはドットで終わる完全修飾ホスト名に一致するようになります)。

しかし、あなたが見つけているように、これはとにかく意図したとおりにリダイレクトしません。 mod_rewrite(特にApacheではなくmod_rewrite)は、substitutionscheme(存在する場合)を検証します。 事前定義されたスキームの短いリスト のいずれでもなく、スラッシュで始まらない場合、relative URLとして認識されます。 mod_rewriteは、リクエストのスキームとホスト名にプレフィックスを付けて、不正なリダイレクトを発生させます。

(また、REQUEST_URIサーバー変数に由来するユーザー名にスラッシュプレフィックスを必要としないと思います。)

代わりに、mod_alias RedirectMatchディレクティブを使用できます。これは、スキームを検証せず、記述されたとおりにURLを送信します。例えば:

RedirectMatch 302 /(.+) instagram://user?username=$1

ただし、mod_rewriteで行っていたように、これはリクエストのホスト名をチェックしません。それは要件でしょうか?この1つのアカウントに複数のドメインがありますか?

また、そのようなURLは、それが懸念される場合、おそらくデスクトップブラウザーによって認識されません。

参照:


ディレクトリインデックスに問題がある場合は、次の関連する質問も参照してください。
私のウェブサイトはInstagramアプリの「index.php」アカウントにリダイレクトし続けます

2
MrWhite