2013-02-21 82 views
3

这个让我感到困惑,如果它不是特定的脚本,那么它与托管我的应用程序的Amazon AMI有关。当使用RewriteRule时,邮件()会发送两次邮件

我发布了我的.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('[email protected]', '', '7'); 

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

有没有人遇到过这个?

编辑: 访问日志显示了这个与重写规则

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

访问日志显示了这种不重写规则

[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

检查'access.log' – zerkms 2013-02-21 03:44:20

+0

我究竟在寻找拍摄? – Eli 2013-02-21 03:46:39

+0

伙计,sendmail的accesslog! – 2013-02-21 03:51:37

回答

3

的问题是,你的路由不存在的文件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('[email protected]', '', '7'); 

来检查icojpgpnggiftxt文件。

+0

是的,这是我正在制定的想法。所以,因为我路由所有trafic到我的index.php我可以创建一个favicon.ico或我可以做的逻辑,只有发送邮件,如果它已被加载的页面请求?有没有办法让一个.htaccess规则委托这个? – Eli 2013-02-21 03:57:54

+0

唯一需要担心的两个“自动请求”是favicon.ico和robots.txt。但这不是一个保证 - 例如,任何应该是404错误将最终触发此脚本。 – 2013-02-21 03:58:53

+0

有关示例代码,请参阅上面的编辑。 – 2013-02-21 04:03:13

0

的问题是与重写规则是不正确

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

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

修复是添加“/”的规则是这样

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

我的假设是,原始RewriteRule未正确捕获GET请求。该favicon.ico曾被请求正如ňRohler指出,但该请求进来为"/favicon.ico"

这是不被原RewriteRule