2012-05-04 8 views
0

私は正規表現をテストしており、これがこれまでに発明された最も効率的なパフォーマンスキラーであるという結論に達しました。Apache mod_rewrite正規表現なしのリライト

私の問題は、私のサイトのためのより良いURLが必要であり、それを行う唯一の正しい方法はApaches Rewriteruleと思われるが、それは正規表現で使用する必要があり、私はこれを避けたいと思います。

正規表現の使用を避けることができるかどうかは誰でも知っています。 .htaccessファイルに今使って何イム

は次のとおりです。

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

どのように私は正規表現を取り除くのですか?

+0

あなたはネットワークを扱っています。これと比較すると、計算は重要ではありません。いくつかの正規表現はコンパイルしてケースを縮退しますが、あなたの例はそれらの1つではありません。 – EJP

+1

あなたは間違っています。 Apache内の典型的な正規表現評価では、bogの標準PCREエンジンが使用され、通常は〜0.1 mSecです。 Apacheは、それぞれが* far *長くなることができる100sのファイルシステム呼び出しを行います。 VFATがキャッシュされていない場合、.htaccessファイルやファイルを読むのは通常〜50mSecです。 – TerryE

+0

正規表現が気に入らないのであれば、代わりに 'errordocument'を使いますが、RegExに重大な悪影響はないと思います。むしろそれらの '-f'と' -d'RewriteCondに焦点を当てたいと思います。それらは非常に遅いIOを必要とします。静的ファイルを専用フォルダ(例えば/ assert)に置き、 'RewriteCond%{REQUEST_URI}!^/assets /'を使用してください。 – Gerben

答えて

2

リダイレクトするURLを事前に知っている場合は、書き換えルールではなくリダイレ​​クトを使用する必要があります。 リダイレクトには正規表現が含まれていませんが、つまり、書き換えたいURLを指定する必要があります。

Redirect /BadUrl http://myhost.com/GoodUrl 

しかし、あなたが望むことは、新しいURLスキームにはApacheによってリダイレクトされ、今、存在しないページの無限の数を持っているのであれば、私はあなたが正規表現で立ち往生していることを恐れている

。しかし、Gerbenによれば、I/Oは正規表現そのものではなくサーバを減速させている可能性が高いと私は思う - 私は一日に何百万というリクエストを持つシステムで作業している。問題が発生しました...

mod_rewrite関数を使用したくない場合は、リダイレクトロジックをApacheから完全に削除することをお勧めします。既にPHPを使用しているので、通常の404ファイルを、URLを目的のURLスキームに書き換えるPHPスクリプトで置き換えることができます。また、ユーザーにブックマークを更新する機会も与えます。