当使用RewriteRule时,mail()会发送两次电子邮件

时间:2013-02-21 03:42:12

标签: php

这个令我感到困惑,如果它不是特定于脚本,那么托管我的应用程序的Amazon AMI会出现问题。

我发布了.htaccess和索引文件的确切内容。唯一的区别是我发送的电子邮件。

这是我的.htaccess文件

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  Options +SymLinksIfOwnerMatch
  RewriteEngine On
  RewriteBase /
</IfModule>

Options -MultiViews

<IfModule mod_autoindex.c>
  Options -Indexes
</IfModule>

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

这是我的index.php

<?php

mail('me@email.com', '', '7');

当我加载索引页面时,我将收到2封当前设置的电子邮件。但如果我注释掉RewriteRule并加载索引页面,我正确地收到了1封电子邮件给我。

有没有人遇到过这个?

编辑: access_log使用RewriteRule

显示此信息
[21/Feb/2013:03:48:27 +0000] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
[21/Feb/2013:03:48:27 +0000] "GET /favicon.ico HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"

access_log显示没有RewriteRule

[21/Feb/2013:03:47:58 +0000] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
[21/Feb/2013:03:47:58 +0000] "GET /favicon.ico HTTP/1.1" 404 295 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"

2 个答案:

答案 0 :(得分:3)

问题在于您将不存在的文件的每个请求路由到index.php。加载页面时,浏览器会自动向http://yourdomain.com/favicon.ico发出请求。由于您的网站上尚未存在此文件,因此index.php再次受到攻击。您可以通过检查$_SERVER['SCRIPT_FILENAME']中的index.php来避免这种情况,只有在它应该是一个页面时生成邮件(与图像文件等相反)。

例如:

if (!preg_match('/\.(ico|jpg|png|gif|txt)$/i', $_SERVER['SCRIPT_FILENAME']))
    mail('me@email.com', '', '7');

检查icojpgpnggiftxt个文件。

答案 1 :(得分:0)

问题在于RewriteRule不正确

这是导致重复电子邮件的那个

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

修复是将“/”添加到规则中,如此

RewriteRule ^/(.*)$ index.php/$1 [L,QSA]

我的假设是原始RewriteRule无法正确捕获GET个请求。正如 N Rohler 指出正在请求favicon.ico,但请求是"/favicon.ico"

未被原始RewriteRule

捕获