2010-12-14 13 views
8

私はウェブサイト上の人々にURLを提供しています。実際には、同じウェブサイト上にある醜いものを指しています。非常に長い.htaccessファイルを作成しても構いませんか?

http://www.mydomain.com/cool-URL
は、実際に私は必要な時に.htaccessファイルを変更することによって、これを達成するために計画してい
http://www.mydomain.com/boring.php?id=478547&sessid=34734asdf7&otherboringdetails

を指します。 PHPスクリプトを.htaccessファイルに書き込んで、URLの新しいハンドアウトがあるときはいつでも、新しい書き換えルールを追加します(管理者以外のプログラマーが制御できる管理領域[これのURLのタイトルを指定してください新しいエントリー、管理者:それは自動的に割り当てられる])。

これは問題ですか?特にこのようなURLが1000かそれ以降は問題ですか?受け入れ可能な実際の数は何ですか?サーバーはURLの要求を受け取った後、.htaccessファイルからこのURLの正しいページを検索し、最後にユーザーを正しいページに送信します。これがデータベース検索のようなものであれば、ユーザーが実際に正しいページにアクセスするまでには長い時間がかかるかもしれません...

これについての指針は何ですか?

+0

私は興味があります。 – Trufa

答えて

18

いいえ、それは問題ではなく、ページの読み込み速度を妨げます。

.htaccessファイルは、すべてのサーバー要求で評価されます。静的画像の場合でも、CSSとJSファイル。したがって、要求を実行している間にREGEXの1000行以上の行を解析するようWebサーバーに要求しています。

また、親ディレクトリの.htaccessファイルは、サブディレクトリにも存在するファイルに対して処理されます。したがって、大規模な.htaccessがWebサイトのルートディレクトリにある場合、サブディレクトリ内のファイルに対して行われたすべての要求(サブディレクトリの.htaccessファイル)とともに処理されます。

私の友人は多くの処理をしています。画像が10枚あるページがある場合などは、プロセスが11回取得されます。そして、ファイル内の処理が増えるほど、より多くのサイクルが必要になります。だから、htaccessファイル内の何かが影響を与えます。その影響は目につくでしょうか?それが問題になったときは言うのは難しいです。しかし、あなたのケースでは比較的シンプルな処理ほどかなり大きくなければならないでしょう。

htaccessファイルのキーはスマートにすることです。 200のエントリをリストしたくないでしょう。 htaccessを使いたい場合は、ほんの数行でスマートにすることができます。

+0

さて、問題の正しい正規表現を作るための研究をします。明確化のおかげで:) –

1

大丈夫です。本当に長くなるとサーバーのラグが発生するかもしれません。私はmod_rewriteの仕様を調べますが、いくつかの行で転送を自動化できるかもしれません& regex関数。私は例を与えるために渡されるURL変数については十分に分かっていません。

5

私は単純なテストを行います:ランダムなURLを持つ大きな.htaccessファイルを生成し、結果のパフォーマンスを自分で測定します。

import random,string 

def rand_string(): 
    length = random.randint(4,10) 
    res = [] 
    for i in range(length): 
     res.append(random.choice(string.letters)) 
    return ''.join(res) 

for i in range(1000): 
    print "RewriteRule %s http://www.mydomain.com/boring.php?%s [R]" % \ 
    (rand_string(), rand_string()) 
4

多くのルールを持つことは本当にお勧めできません。 .htaccessファイルにあるか、各要求に対してテストされているわけではありません。 (設定に応じて、サーバや仮想ホストの設定に入れた場合も同様です)

テストされている巨大なルールであり、ルールによってはすべてのルール一致が見つかるまでテストしなければならない。

まあ、一致を早く見つけられる確率が高くなるように、一致確率の順にルールを並べることでそれを打ち消すことができます。しかし、最悪の場合でも複雑さは依然としてO(n)です。

本当に多くのマッピングが必要で、マッピングが固定されている場合は、分離されたルールでO(n)ではなくO(1)の複雑さを持つRewriteMap hash fileを使用できます。あるいは、マッピングをPHPアプリケーションに移してそこで実行します。

+0

リンクのためのすごい素晴らしいヒントとありがとう! –

1

ここ数人が言及しているように、間違いなくOKです。

事前に書き換えたいすべてのURLを知っていますか?そうであれば、ルールをいくつかのデータベースに保存し、ルールを反復して実際の URLSを事前に生成し、それらをmemcacheに格納することができます。キーはよく見えるURLで、値はコンテンツの実際のURLです。

リクエストが来たら、memcacheでキーを調べて、ユーザーを実際のURLにリダイレクトします。私はあなたが必要と思っていない.htaccessこれのために。

関連する問題