重写规则不起作用

Rewrite rule not working

提问人:Pekka 提问时间:11/25/2009 更新时间:11/25/2009 访问量:345

问:

我想编写一个规则,将特定模式的所有 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

?

apache mod-rewrite url 重写

评论

1赞 Aif 11/25/2009
%{REQUEST_URI} !^/control/ 呢?
0赞 Pekka 11/25/2009
如您所述,使用第二个条件求解。(我不擅长mod_rewrite)。谢谢!

答:

1赞 Gumbo 11/25/2009 #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赞 Pekka 11/25/2009
谢谢秋葵浓汤,这奏效了。我根据 Aif 上面的评论解决了这个问题,但对于子孙后代来说,这是一个很好的全面答案。
0赞 Pekka 11/25/2009
从性能的角度来看,后两种方式是否更可取?
0赞 Gumbo 11/25/2009
@Pekka Gaier:后者跳过了匹配测试。.*