如果输入值有"!",如何将URL重定向到主页?



如果任何用户提交!字符作为输入值,我想将URL重定向到主页。

example.com/index.php?c%5B%5D=%21&c%5B%5D=&c%5B%5D=&c%5B%5D=&c%5B%5D=&ic=&submit=find

如果多个输入值以字符!提交,我希望被重定向到主页,否则代码在同一页上工作。

例如:

https://www.example.com/currencyconverter/convert/?Amount=!&From=USD&To=EUR

包含!值,因此我想将其重定向到我的页面example.com。但是,如果URL是这样的:

https://www.example.com/currencyconverter/convert/?Amount=!3&From=USD&To=EUR
在这个URL中,我提交了输入值!3,所以我不想重定向它。我唯一想要的是,如果URL只包含!值,它被重定向到主页,否则代码正常工作。我该怎么做呢?

如果任何URL参数仅包含!(URL编码或不编码),则重定向到文档根目录。您可以使用.htaccess根文件顶部附近的mod_rewrite来完成此操作:

RewriteEngine On
RewriteCond %{QUERY_STRING} =(!|%21)(&|$)
RewriteRule ^ / [QSD,R=302,L]

更新:正则表达式=(!|%21)(&|$)精确匹配任何值为!%21(!URL编码)的URL参数值。虽然=在这种情况下不是一个特殊的regex元字符,但它需要反斜杠转义,以避免被解释为=Apache mod_rewrite前缀操作符。或者,您可以在文字=之前匹配单个字符,例如。.=.

QSD标志对于从重定向响应中丢弃查询字符串是必需的。

请注意,该规则目前适用于任何url路径。如果它只适用于/currencyconverter/convert/(例如),那么在规则中要具体说明。例如:

:
RewriteRule ^currencyconverter/convert/$ / [QSD,R=302,L]

注意:RewriteRule模式匹配的url路径不以斜杠开头。

除了

:

但是为什么不使用403 Forbidden来阻止请求,而不是发出重定向呢?ie。使用以下RewriteRule代替:

:
RewriteRule ^ - [F]