2009-11-24 140 views
0

我想編寫一個規則,將某個特定模式的所有URL重定向到PHP文件。例外情況:CMS所在的control/目錄。重寫規則不起作用

爲什麼

RewriteCond %{REQUEST_URI} ^/([^control]+)/([^/]+)$ 
RewriteRule .* /pages/index.php?language=%1&page=%2&%{QUERY_STRING} [L] 

domain.com/deutsch/start 

(它拋出404)無法正常工作,而

RewriteCond %{REQUEST_URI} ^/([^control]+)/([^/]+)/debug$ 
RewriteRule .* /pages/index.php?language=%1&page=%2&page_debug=yes&%{QUERY_STRING} [L] 

作品

domain.com/deutsch/start/debug 

+1

%{REQUEST_URI}!^/control /? – Aif 2009-11-24 21:19:33

+0

解決使用第二個條件,如你所述。 (我在mod_rewrite並不是那麼棒)。謝謝! – 2009-11-24 21:35:33

回答

1

您需要使用兩個條件:

RewriteCond %{REQUEST_URI} !^/control/ 
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)$ 
RewriteRule .* /pages/index.php?language=%1&page=%2&%{QUERY_STRING} [L] 

但是,你應該直接在RewriteRule指令如果可能的話使用模式:

RewriteCond $1 !=control 
RewriteRule ^([^/]+)/([^/]+)$ /pages/index.php?language=$1&page=$2&%{QUERY_STRING} [L] 

另一個提示是使用QSA標誌代替明確附加查詢:

RewriteCond $1 !=control 
RewriteRule ^([^/]+)/([^/]+)$ /pages/index.php?language=$1&page=$2 [L,QSA] 
+0

非常感謝Gumbo,工作。根據艾夫的評論,我已經制定出了這個建議,但這對後代來說是一個很好的完整答案。 – 2009-11-24 22:14:02

+0

從性能的角度來看,後兩種方法是否可取? – 2009-11-24 22:14:50

+0

@Pekka Gaier:後者跳過'。*'測試以匹配。 – Gumbo 2009-11-24 22:23:38