我想禁用所有PHP复活节彩蛋:
www.example.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
我在.htaccess
中添加了此代码:
RewriteCond %{QUERY_STRING} PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F]
这适用于http://www.example.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
但不适用于https://www.example.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
,意味着它适用于http://
,但不适用于https://
。
我还在.htaccess
中添加了此内容,将所有https://
重定向到http://
:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
但它还没有奏效。复活节彩蛋仍然可以从https://www.example.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
访问。
我做错了什么?
P.S。:我无法访问php.ini
进行设置。
答案 0 :(得分:0)
RewriteEngine on
必须先于任何规则。
列出的任何条件适用于下一个规则。 通过将L标志添加到规则,可以防止它再检查任何规则
来自文档:
[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑其他规则。 https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l
所以试试这个:
RewriteEngine On
RewriteCond %{QUERY_STRING} PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F,L]
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 1 :(得分:0)
这里需要一个等号字符... STRING} =PHP ...应该可以正常工作。 d:o)
答案 2 :(得分:0)
这是更大的图景...
### If mod_rewrite is true...
<IfModule mod_rewrite.c>
### Prevent Apache from showing its server signature...
ServerSignature off
### Prevent phpinfo from showing details...
RewriteCond %{QUERY_STRING} =PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC] RewriteRule .* - [F]
</IfModule>
...粘贴到您的 .htaccess 文件中。等号前的空格} =PHP 和之后没有空格很重要。 d:o)