2013-11-24 159 views
0

我具有以下设置阿帕奇mod_rewrite的[R,C]不工作

RewriteCond %{REQUEST_URI} ^/search.php$ 
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$ 
RewriteRule^/%1/%2? [R=302] 

采用这种设置一切工作作为例外

example.com/search.php?what=foo &其中=巴

改写为

example.com/foo/bar

但是我还需要再次打的search.php,所以我说

RewriteCond %{REQUEST_URI} ^/search.php$ 
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$ 
RewriteRule^/%1/%2? [R=302,C] 
RewriteRule^/search.php?what=$1&where=$2 [L] 

现在是“跳过”重定向和重写

从 example.com/search.php?what=foo &哪里= bar 至 example.com/search.php?what=foo & where = bar

重定向不能用C标志吗?

回答

0

你不能做到这一点:

RewriteCond %{REQUEST_URI} ^/search.php$ 
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$ 
RewriteRule^/%1/%2? [R=302,C] 
RewriteRule^/search.php?what=$1&where=$2 [L] 

http://www.example.com/search.php?what=foo&where=bar,你不能在同一时间 /富/酒吧和/search.php?what=foo &其中=酒吧命中,改写仅产生唯一的网址。

在上述规则http://www.example.com/search.php?what=foo&where=bar中,它将匹配所有4行,在最后一行,它给出/search.php?what= &其中=,因为$ 1和$ 2是空的。

因此,解决方法是删除的最后一行,就像这样:

RewriteCond %{REQUEST_URI} ^/search.php$ 
RewriteCond %{QUERY_STRING} ^what=(.*)&where=(.*)$ 
RewriteRule^/%1/%2? [R=302] 
+0

对不起,这是不是一种选择。我需要将example.com/search.php?what=foo&where=bar重写为example.com/foo/bar,但我希望将example.com/foo/bar重写为example.com/search.php?what=foo&where =酒吧 – Rooterle