Apache使用查询字符串重定向可能的循环

时间:2012-10-18 19:06:06

标签: apache mod-rewrite

我不太了解Apache重写,我有这套要求,我想做:

1. http://domain.com/keyword ==> http://domain.com/index.php?c=keyword
2. http://domain.com/keyword?utm_source=affiliate ==> http://domain.com/index.php?c=keyword&utm_source=afiliate
3. Do not rewrite any request like http://domain.com/css/ http://domain.com/images/ 

我尝试学习并能够编写这样的重定向来解决#1和#2:

RewriteEngine on
RewriteRule ^([A-Za-z0-9-+.,]+)\?*(.*)$ index.php?c=$1$2 [QSA]

这符合我上述要求中#1和#2的工作。但是,当我尝试访问http://domain.com/b之类的网址时,会产生以下结果(PHP)$_SERVER['QUERY_STRING']: c=index.php&c=b

此外,如果我改变(仅因为我很好奇)带有绝对域的[R,QSA]标志,我会得到一个连续循环重定向,这表明该规则正在被多次处理。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

尝试添加一对RewriteCond来过滤那些您不想重写的路径,如下所示:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/images/
RewriteRule ^([A-Za-z0-9-+.,]+)\?*(.*)$ index.php?c=$1$2 [QSA]