为什么指令只有在包含在WordPress指令中时才起作用?

时间:2019-09-17 作者:Motivated

以下指令旨在阻止访问感谢页面。它出现在WordPress指令下面。该页面保持可访问状态,并且不显示403 错误

RewriteCond %{THE_REQUEST} ^(.*)?thanks?(/)$ [NC]
RewriteRule ^(.*)$ - [F,L]
当该指令作为WordPress指令的一部分包含时,它将按预期工作。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_URI} ^(.*)?thanks?(/)$ [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
为什么第一块指令不起作用,为什么它只在作为WordPress指令的一部分时起作用?

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

当该指令作为WordPress指令的一部分包含时

它只需要在WordPress前端控制器之前运行。事实上,您不应该将其作为“WordPress指令的一部分”包括在内,因为WP本身试图维护此代码块,并且可能在将来的更新中覆盖您的自定义指令。

您应该将此自定义指令置于# BEGIN WordPress

如果您将指令“放在WordPress指令的下方”,它就不起作用了,因为它根本就不会被处理。前面的WP指令将所有请求(对于不存在的文件/目录)路由到/index.php - 之后,处理停止,随后的任何mod\\u rewrite指令都将被绕过。

只有当“thank you”请求直接映射到文件系统上的物理文件时,它才会起作用(使用WP front controller之后的指令),在这种情况下,请求不会被重写为/index.php 并允许继续处理文件。

旁白:

RewriteCond %{REQUEST_URI} ^(.*)?thanks?(/)$ [NC]
RewriteRule ^(.*)$ - [F,L]
这可以简化为一个指令:

RewriteRule thanks?/$ - [NC,F]
TheL (last) 当F 使用标志;这是隐含的。

相关推荐

在不提示错误的情况下增加.htaccess文件上载

我有一个Centos Web面板托管和一个新的WordPress文件。我想将所有本地WordPress文件迁移到live server,所以我在一个WP迁移中安装了所有文件。不幸的是,它只能接收2 MB的数据。要导入的总数据约为297 MB。所以我试着在.htaccess 但每次我进行更改时,它都会提示我错误:Internal Server Error服务器遇到内部错误或配置错误,无法完成您的请求。请通过联系服务器管理员[email protected]通知他们此错误发生的时间,以及您