我有一个Laravel
应用程序,我希望它加载一个角应用程序,当用户已经被认证,并请求一个特殊的子域驻留在/public
目录
假设我的public
包含:
---ng
---app
+---bower_components
| +---angular
| +---angular-loader
| +---angular-mocks
| +---angular-route
| ---html5-boilerplate
| +---dist
| | +---css
| | +---doc
| | +---img
| | ---js
| | ---vendor
| +---src
| | +---css
| | +---doc
| | +---img
| | ---js
| | ---vendor
| ---test
+---components
| ---version
+---view1
---view2
my .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]
RewriteCond %{HTTP_HOST} sub.domain.com
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) ng/app/$1 [L]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
问题:
当我请求例如http://sub.domain.com:8080/bower_components/html5-boilerplate/dist/css/normalize.css
Laravel返回404。
我如何从公共目录加载这个ng应用程序,但也通过laravel的index.php
运行请求来检查身份验证和授权
/bower_components/html5-boilerplate/dist/css/normalize.css
不映射到现有文件。这就是为什么第二条规则
RewriteCond %{REQUEST_FILENAME} -f
不匹配,第三条规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
。Laravel不知道如何处理这个请求,并报告一个错误404。
详情见RewriteCond
REQUEST_FILENAME
如果在引用REQUEST_FILENAME时服务器已经确定了匹配请求的文件或脚本的完整本地文件系统路径。否则,例如在虚拟主机上下文中使用时,与REQUEST_URI相同的值。根据AcceptPathInfo的值,服务器可能只使用了REQUEST_URI的一些前导组件来将请求映射到文件。
如果你想检查一个文件的请求路径,你可以用%{DOCUMENT_ROOT}/ng/app
作为变量的前缀,看看它是否对应于一个现有的文件,例如
RewriteCond %{DOCUMENT_ROOT}/ng/app%{REQUEST_URI} -f
RewriteRule ^ ng/app%{REQUEST_URI} [L]
尝试使用:
RewriteCond %{REQUEST_FILENAME} !-f
代替:
RewriteCond %{REQUEST_FILENAME} -f