【发布时间】:2014-05-02 07:09:53
【问题描述】:
我注意到我正在使用 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),路由被调用了两次,但对于重复代码(可能是由于某些会话缓存?)只调用了一次。多次尝试的“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 文件是新鲜的,除了上面的四行路由代码外,我没有更改任何内容。我在 public 文件夹中有 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 文件。
非常感谢任何帮助。非常感谢!
【问题讨论】:
-
路由怎么叫?通过普通链接(http get 请求)还是通过 ajax 请求?如果是 ajax,你可能会遇到 JS 事件冒泡的问题。
-
通过普通的http获取请求
-
如果你在 PHP 内置的网络服务器上本地运行它会怎样?只是看看它是 Laravel 问题还是 Apache 相关问题。
-
在我的laravel环境(laravel 4.1.28)中,上面的路由函数只调用了一次。您的浏览器插件或杀毒软件有什么影响吗?