0

URLに基​​づいてリダイレクトする最も効率的な方法がわかりません。必要なものに近いhtaccessの例を見てきましたが、その背後にあるプログラミングをまったく理解していません。これが私が起こる必要があることです:

  1. ページが「watch.html」かどうかを確認します。
  2. URLが「watch.html?blahblah」ではなく「watch?blahblah」と表示されている場合はリダイレクトします。
    • 基本的に、URLに.htmlがない場合
  3. .htmlが追加された同じページにリダイレクトします。

このコードを書くのに助けていただければ幸いです。

4

1 に答える 1

3

いや、それは完全に大丈夫だと思います。mod_rewriteモジュールの構文はかなりあいまいであり、非常にイライラする可能性があります。

あなたが望むものはこのように書くことができます:

RewriteEngine On

RewriteCond %{REQUEST_URI} !\.html$
RewriteRule (.*) $1.html

まず、書き換えエンジンをオンにします。次に、RewriteCondディレクティブがあります。その条件がtrueと評価された場合、それに続く単一のRewriteRuleが適用されます。RewriteCondの構文は単純です:RewriteCond <subject> <regex pattern>; パターンが主題と一致する場合、条件はtrueに評価されます。この場合、パターンはREQUEST_URIと呼ばれるサーバー変数であり、PHPからおなじみかもしれませんが、ユーザーが要求したURIを保持しています。ここのパターンは正規表現です\.html$。ここでの\は、ドットをエスケープするためのエスケープ文字です。ご存知のとおり、正規表現では特別な意味があります(「任意の文字に一致」)。$記号は行末を示します。!!式全体を否定するため、後続のパターンが一致しない場合は条件が真になります。したがって、RewriteCond行には、「要求されたURIが文字列.htmlで終わっていない場合」と表示されます。

次に、RewriteRuleディレクティブがあります。その構文はRewriteCond <from> <to> [optional flags]です。'from'部分は、一致する正規表現パターンです。'to'の部分は、元のクエリを書き換える文字列です。特定の例では、fromは(.*):です。「任意のキャラクター」を意味し、星は「いつでも」を意味するので、基本的には「任意の数のキャラクター」を意味し、パス全体をキャプチャしたいという意味です。後でキャプチャした部分を参照できるように、これをパランセシスに入れます。次に、これを次のように書き直します$1.html。ここで、$ 1は、「from」部分でキャプチャした最初の文字列を指します。

以上です。アドレスバーに「example.com/something」と入力すると、「example.com/something.html」ページが表示されます。

もちろん、これは非常に基本的なことであり、よりエレガントなものにするために大幅に改善される可能性がありますが、これで始めることができます。周りには役立つチュートリアルがたくさんあり、ドキュメントも非常に役立ちます。

于 2012-05-28T18:56:41.780 に答える