我不太了解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]标志,我会得到一个连续循环重定向,这表明该规则正在被多次处理。
有人可以帮忙吗?
答案 0 :(得分:1)
尝试添加一对RewriteCond
来过滤那些您不想重写的路径,如下所示:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/images/
RewriteRule ^([A-Za-z0-9-+.,]+)\?*(.*)$ index.php?c=$1$2 [QSA]