提问人:Pekka 提问时间:11/25/2009 更新时间:11/25/2009 访问量:345
重写规则不起作用
Rewrite rule not working
问:
我想编写一个规则,将特定模式的所有 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赞
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:后者跳过了匹配测试。.*
下一个:CMS的图像后处理
评论