簡単に言うと、私は両方example.com/aJ5
をexample.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 の任意の文字列と一致するように指示します/
。