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



这个让我很困惑,如果它不是特定于脚本的,那么它就是托管我的应用程序的AmazonAMI的问题。

我正在发布.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在没有重写规则的情况下显示

[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"

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

例如:

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

它检查icojpgpnggiftxt文件。

问题在于RewriteRule的不正确

这就是造成重复电子邮件的原因

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

修复方法是像这个一样在规则中添加"/"

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

我的假设是原始CCD_ 10没有正确捕获CCD_。正如N Rohler指出的那样,favicon.ico正在被请求,但请求是以"/favicon.ico" 的形式发出的

其未被原始CCD_ 14 捕获

最新更新