.htaccess 如何重定向一个网址到主页,如果输入值有“!"?

xyhw6mcr  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(163)

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

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

如果提交了多个带有字符!的输入值,我希望被重定向到主页,否则代码在同一页上工作。
例如,在此URL中:

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只包含!值,它将被重定向到主页,否则代码将正常工作。我该如何做到这一点?

u59ebvdq

u59ebvdq1#

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

RewriteEngine On

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

**UPDATE:**正则表达式\=(!|\%21)(&|$)与值为!%21! URL编码)的任何URL参数值完全匹配。虽然=在此上下文中不是特殊的正则 meta字符,但需要反斜杠转义以避免被解释为= Apache mod_rewrite前缀运算符。或者,您可以在文字=之前匹配单个字符,例如.=

QSD标志是从重定向响应中丢弃查询字符串所必需的。
请注意,此规则目前适用于任何URL路径。如果它只适用于/currencyconverter/convert/(例如),请在规则中指定。例如:

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

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

  • 旁白 *

但是为什么不使用403 Forbidden来阻止请求,而不是发出重定向?例如,使用下面的RewriteRule来代替:

:
RewriteRule ^ - [F]

相关问题