.htaccess htaccess-重定向包含/THIS/something/that的所有URL/

.htaccess htaccess-重定向包含/THIS/something/that的所有URL/,.htaccess,url-rewriting,.htaccess,Url Rewriting,我的CMS经常陷入循环,因为生成了不可能的URL。这些URL具有相同的格式 www.xy.com/STRING1/something/STRING2/something 或 我想拒绝或阻止包含STRING1和STRING2作为段的所有URL。 谢谢你的建议 您可以通过以下重写来完成: RewriteRule STRING1\/.*\/STRING2.* https://www.xy.com/ [R=301,L] 上面被接受的答案有很多问题,所以我将发布一个更正 RewriteEngine o

我的CMS经常陷入循环,因为生成了不可能的URL。这些URL具有相同的格式

www.xy.com/STRING1/something/STRING2/something

我想拒绝或阻止包含STRING1和STRING2作为段的所有URL。
谢谢你的建议

您可以通过以下重写来完成:

RewriteRule STRING1\/.*\/STRING2.* https://www.xy.com/ [R=301,L]

上面被接受的答案有很多问题,所以我将发布一个更正

RewriteEngine on
RewriteRule ^/?STRING1/.*/STRING2/ https://example.com/ [R=301]
注意:
L
标志在实现外部重定向时没有任何意义。而且,在公认的答案中,匹配并不十分精确

如果要返回显式http状态(如403),也可以执行以下操作:

RewriteEngine on
RewriteRule ^/?STRING1/.*/STRING2/ - [R=403]
一开始使用302临时重定向是一个好主意,在确定所有设置都正确后,只需将其更改为301永久重定向。这样可以防止在尝试时出现缓存问题

此规则同样适用于http服务器主机配置或动态配置文件(“.htaccess”文件)中。显然,重写模块需要在http服务器中加载,并在http主机中启用。在使用动态配置文件的情况下,您需要注意在主机配置中启用该文件的解释,并且该文件位于主机的
DOCUMENT\u ROOT
文件夹中


还有一个一般性的注释:您应该总是更喜欢将这些规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实降低了http服务器的速度。只有在您无法访问真正的http服务器主机配置(读:真正廉价的服务提供商)或坚持编写自己的规则的应用程序(这显然是一个安全噩梦)的情况下,才提供它们作为最后一个选项

谢谢海因茨,这很有效!您可能知道如何创建禁止的错误代码而不是重定向吗?请尝试
重写规则STRING1\/.*\/STRING2.*-[R=403,L]
。看见如果这不起作用,那就提出一个新问题。阿卡斯卡,非常感谢。请您解释一下为什么添加^/?重写规则?这样的顺序使规则更具可移植性。我写道,这个规则可以在真实http服务器的主机配置或动态配置文件(“.htaccess”)中实现。这一序列就可以实现这一点,您需要记住,重写规则在每个目录上下文中实现时在相对路径中运行,但在正常实现时在正常、更健壮的绝对路径上运行。该序列负责处理前导斜杠(“/”)。这样,在两种情况下都可以使用相同的规则,而无需修改任何内容。从长远来看是值得的;-)非常有帮助,谢谢!在我看来,你的答案比我第一次接受的答案更有用,所以我把接受换成了你的答案。
RewriteEngine on
RewriteRule ^/?STRING1/.*/STRING2/ - [R=403]