.htaccess:禁用.htaccess上的复活节彩蛋不起作用

时间:2017-02-18 19:59:44

标签: php apache .htaccess mod-rewrite

我想禁用所有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进行设置。

3 个答案:

答案 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)