2012-10-08 93 views
1

我有服務器超載,服務器管理員說,這個問題是來自htaccess的文件引起如何優化這個RewriteEngine代碼?

這是代碼:

RewriteEngine On 
RewriteBase /here/ 
RewriteRule ^top/?$ index.php?mode=top [QSA] 
RewriteRule ^top/video/?$ index.php?mode=top&cat=vids [QSA] 
RewriteRule ^top/picture/?$ /index.php?mode=top&cat=pics [QSA] 

RewriteRule ^random$ index.php?mode=random [QSA] 
RewriteRule ^random/video/?$ index.php?mode=random&cat=vids [QSA] 
RewriteRule ^random/picture/?$ index.php?mode=random&cat=pics [QSA] 

RewriteRule ^new/?$ index.php [QSA] 
RewriteRule ^new/video/?$ index.php?mode=&cat=vids [QSA] 
RewriteRule ^new/picture/?$ index.php?mode=&cat=pics [QSA] 

RewriteRule ^video/([0-9]+)_(.*)$ item.php?cat=vids&id=$1 [QSA] 
RewriteRule ^picture/([0-9]+)_(.*)$ item.php?cat=pics&id=$1 [QSA] 
ErrorDocument 404 /item.php 

回答

1

這將讓你有中途:

RewriteEngine On 
RewriteBase /here/ 
RewriteRule ^(top|random|new)/?$ index.php?mode=$1 [QSA] 
RewriteRule ^(top|random|new)/(video|picture)/?$ index.php?mode=$1&cat=$2 [QSA] 
RewriteRule ^(video|picture)/([0-9]+)_(.*)$ item.php?cat=$1&id=$2 [QSA] 
ErrorDocument 404 /item.php 

這不會給你同樣的結果 - 你cat要麼是videopicture,不vidspics,所以你將不得不改變你的腳本以使其工作。

如果你不能使這項工作,你可以用你的這個略微簡化版本:

RewriteEngine On 
RewriteBase /here/ 
RewriteRule ^(top|random|new)/?$ index.php?mode=$1 [QSA] 
RewriteRule ^top/video/?$ index.php?mode=top&cat=vids [QSA] 
RewriteRule ^top/picture/?$ /index.php?mode=top&cat=pics [QSA] 

RewriteRule ^random/video/?$ index.php?mode=random&cat=vids [QSA] 
RewriteRule ^random/picture/?$ index.php?mode=random&cat=pics [QSA] 

RewriteRule ^new/video/?$ index.php?mode=&cat=vids [QSA] 
RewriteRule ^new/picture/?$ index.php?mode=&cat=pics [QSA] 

RewriteRule ^video/([0-9]+)_(.*)$ item.php?cat=vids&id=$1 [QSA] 
RewriteRule ^picture/([0-9]+)_(.*)$ item.php?cat=pics&id=$1 [QSA] 
ErrorDocument 404 /item.php 
1

減少的RewriteRules,把完全的路由到PHP和處理就其中404

例子:

RewriteBase /my_blog 

RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-f 
RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-d 
RewriteRule ^router.php [PT] 

router.phpvar_dump($_SERVER);所以你看請求的URL是什麼以及可以處理什麼。