通过.htaccess仅允许URL模式中的一些字符串

时间:2019-07-14 16:31:09

标签: regex .htaccess

我需要使用htaccess和regex阻止对随机url字符串的访问以阻止bot,并仅允许某些字符串,其中某些字符串必须包含部分随机内容。

我需要允许访问:/ shows / page /,/ shows / sort /,/ shows / genre /,/ shows / release /, / shows /!(任何字符串)-并否认:/ shows /“其他” /。 允许访问包含 / shows /!(任何字符串)/ 的任何URL的需求使得不可能列出允许的特定URL。

当前我正在使用

RewriteRule ^shows/[^srgp!] - [NC,F]

通过允许访问上述网址并拒绝访问以“ / shows / s,r,g,p ,!”以外的任何内容开头的任何地址来部分起作用。

但是,它仅根据第一个字符进行比较,因此允许/ shows / s 其他,/ shows / r andom,/ shows / g 充满活力,并且类似...因此大量不必要的流量仍在通过。

我需要比较整个单词,也要允许“!”后跟任何字符串。我尝试过

RewriteRule ^shows/^((?!page|sort|genre|release|!).)*$ - [NC,F]

和各种类似的解决方案,但未能成功实施。

1 个答案:

答案 0 :(得分:0)

好的,所以我想出了一种方法,只是没有我想要的那么干净-我加了一个额外的“!” / shows /!(random_string)网址的字符,因此它是/ shows / !!(random_string)。然后,我为每个允许的网址的第二个字符添加了单独的匹配规则:

#block url pattern SHOWS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^shows/[^srgp!] - [NC,F]
RewriteRule ^shows/p[^a!] - [NC,F]
RewriteRule ^shows/s[^o!] - [NC,F]
RewriteRule ^shows/g[^e!] - [NC,F]
RewriteRule ^shows/r[^e!] - [NC,F]
RewriteRule ^shows/![^!] - [NC,F]
</IfModule>
#end block url pattern

然后,它匹配我允许的url的前两个字符,而不是仅匹配第一个字符,并阻止其他所有内容,这似乎增加了可接受的安全级别。如果必须的话,可以用类似的方法添加整个url字符串,这也将有必要添加另一个“!”对于允许的每个新字符,将字符添加到允许的URL / shows / !!(random_string)-这是通过永久链接结构完成的。