2009-11-24 119 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