我需要重写一些网站。我需要在有一个或多个变量时重写网站,例如:
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]
答案 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参数name
,par2
或par3
之一的请求。明白了吗? Apache在内部使用PCRE regexp引擎,因此您可以使用任何PCRE教程或在线帮助程序来协助。我还添加了一个小问题,您可以在Tips for debugging .htaccess rewrite rules添加到您的网站。