重写一个或多个变量的条件

时间:2012-08-21 06:46:30

标签: apache .htaccess rewrite

我需要重写一些网站。我需要在有一个或多个变量时重写网站,例如:

mysite.com/site.php?id=5 or  
mysite.com/site.php?id=5&other_variable=233 or  
mysite.com/site.php?id=5&any_stuff_here(numbers-letters-spacial_chars)

我尝试了一些htaccess规则,但它不起作用。

实际上我的规则如下:

RewriteCond %{QUERY_STRING} ^id=5$ [or]
RewriteCond %{QUERY_STRING} ^id=5$ 
RewriteRule ^site\.php$ http://mysite.com/folder/5_some_txt.html? [L,R=301]

第一个条件适用于一个变量,第二个条件现在与第一个变量相同(我试图在这里放置一些东西来处理url中的其余变量)。我想我需要以某种方式改变它,或者可能有更好的方法来实现我想要做的事情。

任何人都可以帮我吗?

编辑:我在同一个htaccess文件中也有这样的规则:

RewriteRule ^site/([0-9]+)_(.*).html$ site.php?id=$1&name=$2 [L,NC,NS]

1 个答案:

答案 0 :(得分:1)

为了整理一下,你可以使用\b(分词)元字符:

RewriteCond %{QUERY_STRING} ^id=5\b
RewriteCond %{QUERY_STRING} !name 
RewriteRule ^site\.php$     http://mysite.com/folder/5_some_txt.html?   [L,R=301]

我不确定为什么你有name排除。当然你需要在这里更紧张吗?例如,如果查询包含name参数,!\bname=将阻止重定向。

以你的评论为例,我会这样做:

RewriteCond %{QUERY_STRING} !\b(name|par2|bpar3)=

这将排除任何包含GET参数namepar2par3之一的请求。明白了吗? Apache在内部使用PCRE regexp引擎,因此您可以使用任何PCRE教程或在线帮助程序来协助。我还添加了一个小问题,您可以在Tips for debugging .htaccess rewrite rules添加到您的网站。