我有这个 .htaccess 文件(这是 laravel 附带的文件。我所做的唯一更改是在 URL 中强制使用 https,代码如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
...
RewriteEngine On
...
# This block works perfectly
RewriteCond %{REQUEST_URI} ^(/phpmyadmin.*)$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ /404 [R=301,L]
# This block doesnt
RewriteCond %{REQUEST_URI} ^(/processor.*)$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ /404 [R=301,L]
</IfModule>
我想要实现的是,我的一些页面被 IP 锁定。我已经使用上面的第一个块实现了这一点。
第二个块不适用于阻止除指定 IP 地址之外的所有 IP 地址(如果指定 IP 地址完全相同)。它仍可供公众访问。
答案1
你把“阻止”指令放在了错误的地方——它们需要被移除前Laravel 前端控制器(您似乎已省略)可能位于这些指令之前。
第一个块“有效”,因为表单的 URL/phpmyadmin
可能映射到物理文件,而/processor
URL 则不是(即“虚拟”)。您可能通过 Laravel 路由所有“虚拟”URL,因此后面的任何 mod_rewrite 指令都将被忽略。(?)