0

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

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]
4

1 回答 1

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排除。你肯定需要在这里更紧吗?例如!\bname=,如果查询包含名称参数,则会阻止重定向。

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

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

这将排除任何包含 GET 参数之一的请求namepar2par3。明白了吗?Apache 内部使用 PCRE 正则表达式引擎,因此您可以使用任何 PCRE 教程或在线助手来协助。我还包括一个小检查器,您可以在调试 .htaccess 重写规则的提示中将其添加到您的网站。

于 2012-08-21T08:56:55.643 回答