处理除Laravel资产之外的所有请求的路由

时间:2016-10-26 11:19:32

标签: php laravel laravel-5

我们正在使用Laravel 5,并且有一条处理所有请求的路由:

Route::any('{all}', 'AllController')
        ->where('all', '.*');

然而,这引发了一个挑战:它重定向包括图像,JS和CSS在内的所有内容。

我们希望Web服务器和Laravel处理资产(静态内容)只处理动态内容。我们试过这个:

Route::any('{all}', 'AllController')
        ->where('all', '.*')->where('all', !=, 'assets/.*');

但它会出现语法错误unexpected '!=' (T_IS_NOT_EQUAL)

我们如何构建一条处理除资产(静态内容)之外的所有事物的路线?

编辑:.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

1 个答案:

答案 0 :(得分:1)

看起来您在使用Web服务器配置时遇到问题。只有在请求的文件不存在时,Laravel才会处理路由。在其他情况下,Web服务器将返回没有Laravel的.css .js。对于Apache,这个规则看起来像

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

UPD:无论如何你可以使用regexp来实现这个

Route::any('{all}', 'MyBar@index')->where('all','^((?!assets).)*?');