我们正在使用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>
答案 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).)*?');