短縮 URL と長い URL を同じドメインで一緒に再生できるようにする (RewriteRule)

短縮 URL と長い URL を同じドメインで一緒に再生できるようにする (RewriteRule)

簡単に言うと、私は両方example.com/aJ5example.com/any-other-url連携させたいのです。私はApacheを使っていますが、正規表現を書くのはあまり得意ではありません。

すべてをアプリのエントリ ポイントに送信するグローバルがすでにありますRewriteRule。必要なのは、Apache に指示しif length($path) is <= 5 charsて別の場所に書き換えることです。

正規表現で like 構文を使用できることはわかっています{1,5}が、それが探しているものかどうかはよくわかりません。

これを PHP レベルではなく Web サーバー レベルで実装したいと思います。ご協力いただければ幸いです。

答え1

-短縮 URL に文字が含まれないと想定できる場合:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

これはテストされていませんが、このようなものが機能するはずです。基本的に、 のREQUEST_URIような条件を渡すと/abc12、制御は任意のハンドラーに切り替わります。5 文字を超える URL や、'slug' 文字 "-" またはアンダースコアを含む URL はスキップされます。

%1最後のRewriteCondバックリファレンスは、短縮 URL に展開されます。これを最初に適用するには、これを他のルールの上に配置します。フラグを使用すると、[L]URL の書き換えが停止され、制御がアプリに渡されます。

答え2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

これは、長さが 1 文字から 5 文字までのリクエストに一致し、次の RewriteRule を実行します。これより長いリクエストでは、RewriteRule は実行されません。REQUEST_URI 変数は、ブラウザが Web サーバーに渡したものです。同じことを単一の RewriteRule で処理することもできますが、上記では必要に応じて連鎖させることができます。

 ^/.{1,5}$

^ = 文字列の先頭に一致します
/ = スラッシュに一致します
. = 改行文字以外の任意の1文字に一致します
{1,5} = 正規表現エンジンに前の文字を1~5回一致させるように指示します
$ = 行末文字に一致します

この/.{1,5}$構造は、正規表現エンジンに、直後に行末文字が続き、直前に文字がある、サイズが 1 ~ 5 の任意の文字列と一致するように指示します/

関連情報