我注意到我正在使用 laravel 开发的应用程序的激活路由发生了奇怪的行为,并且在通过 xdebug 等进行了数小时的调试后,我发现我的路由实际上有时被调用了两次。为了重现这种情况,我使用默认文件创建了一个全新的 Laravel 项目,并添加了一个简单的路由作为执行以下操作的测试:
Route::get('/activate/{code}', function($code)
{
file_put_contents('/home/fa/testproj/route_called.txt', $code . "\n", FILE_APPEND);
});
基本上,这个简单的路由所做的就是获取 URI 上传递的路由参数并将其记录到一个文件中。奇怪的是,我注意到对于我在 URI 上键入的代码参数(例如 http://myserver/activate/123456789
),路由被调用了两次,但对于重复的代码只调用了一次(可能是由于一些 session 缓存?)。多次尝试的'route_called.txt'文件内容如下:
123456789
123456789
123838384242
123838384242
123838384242 <---- notice that it's called only once for repeated parameter
1238383842424657347
1238383842424657347
332211576347
332211576347
332211576347 <---- notice that it's called only once for repeated parameter
1238376540897326
1238376540897326
laravel 文件是最新的,除了上面的四行路由代码外,我没有做任何更改。我在公用文件夹中有 laravel 提供的标准文件:
-rw-rw-r-- 1 fa fa 0 Apr 15 16:06 favicon.ico
-rw-rw-r-- 1 fa fa 356 Apr 15 16:06 .htaccess
-rw-rw-r-- 1 fa fa 1586 Apr 15 16:06 index.php
drwxrwxr-x 2 fa fa 4096 Apr 15 16:06 packages/
-rw-rw-r-- 1 fa fa 24 Apr 15 16:06 robots.txt
laravel 提供的 .htaccess 也没有改变:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我的服务器是 Ubuntu 12.04LTS,运行 Apache 2.2.22 以及 laravel 所需的所有标准 php 模块。
有些人在别处说这可能是由于缺少 favicon.ico 问题,但 laravel 已经解决了这个问题,已经为我们提供了上面的 favicon.ico 文件。
非常感谢任何帮助。非常感谢!
最佳答案
没关系,我设法找到了为什么会出现这种奇怪行为的答案。这与 Laravel 完全无关。似乎是 ISP 级别的互联网过滤设备将重复的 HTTP 请求发送到我的服务器。我猜设备会发送模仿我们浏览页面请求的重复请求,以检查我们访问的网站是否符合过滤策略......不得不重新设计我的应用程序的一些逻辑以适应这种情况。
关于php - 带有参数的 Laravel-4 路由被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23422703/