重写规则不起作用

时间:2009-11-24 21:12:11

标签: apache mod-rewrite url-rewriting

我想编写一个规则,将某个模式的所有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 个答案:

答案 0 :(得分: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]