流明简单路由请求不起作用

时间:2015-08-28 23:49:46

标签: laravel lumen

我在网络服务器上安装了流明,但我遇到路由问题

// http://12.345.678.910/
$app->get('/', function() use ($app) {
    return "This works";
});

但在第二种情况下,他无法找到目录

// http://12.345.678.910/api
$app->get('/api', function() use ($app) {
    return "This dont work";
});

在第二种情况下,我收到标准的404错误。

The requested URL /api was not found on this server.

我使用Apache,Ubuntu,PHP 5.5和Lumen

3 个答案:

答案 0 :(得分:14)

听起来您的网址重写无效。如果您在index.php之前向网址添加/api吗?

例如,yourdomain.com/api将变为yourdomain.com/index.php/api,如果第二个网址有效,则重写无效。

如果您的重写不起作用,但.htaccess目录中有public文件,那么您可能需要在Apache配置中允许覆盖。以下是Ubuntu上Lumen的示例虚拟主机配置。

我已标记了您需要更改的行。将第一个和第三个更改为指向您网站目录中的public目录。然后将第二行更改为您在网站上使用的域名。

<VirtualHost *:80>
    DocumentRoot "/var/www/lumen/public"      # Change this line
    ServerName yourdomain.com                 # Change this line
    <Directory "/var/www/lumen/public">       # Change this line
        AllowOverride All    # This line enables .htaccess files
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

您需要重启Apache才能使这些设置生效。

更好的方式

启用.htaccess文件应该有效,但使用.htaccess会减慢您的网站速度。最佳解决方案是将.htaccess文件的内容放入虚拟主机中,然后禁用.htaccess个文件。

示例虚拟主机配置如下所示:

<VirtualHost *:80>
    DocumentRoot "/var/www/lumen/public"  # Change this line
    ServerName yourdomain.com             # Change this line

    <Directory "/var/www/lumen/public">   # Change this line
        # Ignore the .htaccess file in this directory
        AllowOverride None

        # Make pretty URLs
        <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>
    </Directory>
</VirtualHost>

再一次,您需要重新启动Apache才能使这些设置生效。

答案 1 :(得分:2)

在应用程序的根目录中,创建一个.htaccess文件(如果尚未存在)。然后粘贴以下代码:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

我假设您使用apache服务器并启用了mod_rewrite

阅读流明documentation中的基本配置部分。

如果您不确定如何开启mod_rewrite,此stackoverflow post可能会对您有所帮助。

答案 2 :(得分:1)

可能缺少struct Customer { size_t operator()(const char& c) const; }; unordered_multiset<char, Customer>* ms 文件夹下的.htaccess文件。 检查一下:https://github.com/laravel/lumen/blob/master/public/.htaccess