正则表达式规则用特定单词排除url

时间:2014-03-09 14:27:05

标签: php regex

当我在我的网站上搜索“abc 920 def”时,域名将会触发:

http://www.domain.com/?s=abc+920+def

然后,这个重定向规则:

​/?(.*)=(.*)920(.*)

会将其重定向到某个类别:domain.com/all-things-920/

现在的问题是我有一些其他页面为收据页面生成随机数,例如:

/store/receipt/?ouid=0955a8980823k920

由于该网址包含920,因此会将其重定向到我不想要的类别domain.com/all-things-920/

我尝试使用一些正则表达式组合而没有任何运气。 如果网址中包含ouid,是否有办法排除正则表达式规则?

我试过了:/?(?!ouid)(.*)=(.*)920(.*)没有运气。

当我使用规则/?s=(.*)920(.*)时,它会将/?/放在网址路径的中间。例如domain.com/?/all-things-920/

3 个答案:

答案 0 :(得分:1)

您可以使用这样的重写规则:

RewriteCond %{QUERY_STRING} (?:^|&)s=.*?920[^&]*(?:&|$)
RewriteRule ^ /all-things-920/? [L,R]

答案 1 :(得分:0)

如果您真的只想要与920的任何/s=字符串匹配的正则表达式,那么您可以尝试:

/s=(.*)920(.*)

答案 2 :(得分:-1)

该重定向逻辑应属于PHP,而不是.htaccess或您正在重定向的任何内容。

然后您可以轻松查看$_GET['s']值。

您可以使用header("Location: www.domain.com/wherever");

重定向