2012-05-04 25 views
0

我一直在測試正則表達式,並得出這樣的結論,即這是迄今爲止發明的最高效的性能殺手。Apache mod_rewrite沒有正則表達式的重寫?

我的問題是,我需要更好的網址和唯一正確的方式來做它似乎是Apaches Rewriterule,但它需要與正則表達式,我想避免這種情況。

任何人都知道,如果可能避免使用正則表達式,如果是,那麼該怎麼辦呢?

使用的是現在什麼IM在.htaccess是:

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

我如何擺脫正則表達式的?

+0

您正在處理網絡。相比之下,任何計算都是微不足道的。一些正則表達式編譯後會退化,但您的示例似乎並不是其中之一。 – EJP

+1

你錯了。 Apache中的典型正則表達式評估使用了一個bog標準PCRE引擎,通常需要約0.1 mSec。 Apache可以執行100次文件系統調用,每個調用可能會更長*。讀取.htaccess文件,或者如果VFAT不預緩存通常是〜50毫秒 – TerryE

+0

使用'errordocument',而是如果你不喜歡的正則表達式的任何文件,但我不認爲正則表達式會有任何顯著的負面影響。我寧願將注意力放在那些'-f'和'-d' RewriteCond上。那些需要很慢的IO。而是將靜態文件放在專用文件夾中(例如/斷言)並使用'RewriteCond%{REQUEST_URI}!^/assets /'。 – Gerben

回答

2

如果事先要重定向的URL哪知道,我應該使用重定向而不是重寫規則。 重定向沒有正則表達式,但這意味着您需要指定要重寫的每個URL,例如

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

但是,如果你想要的是擁有現在已經不存在的頁面被Apache重定向到一個新的URL方案無限多,我怕你堅持正則表達式。我應該,但是,同意戈認爲它更可能是IO正在放緩的服務器停機,而不是正則表達式本身 - 我與具有每天數百萬的請求的系統工作,它不是重寫規則這是我們的主要表現問題...

如果基本重定向不工作,你不希望使用mod_rewrite的功能,我建議從Apache的完全脫離移動重定向邏輯。由於您已經在使用PHP,因此您可以簡單地將正常的404文件替換爲將腳本重寫爲所需URL方案的PHP腳本。它也會讓用戶有機會更新他們的書籤。