【发布时间】:2014-03-24 11:50:46
【问题描述】:
我正在尝试使用 laravel 中的 RESTful api 和 angular 中的富客户端编写应用程序。顺便说一句,这很好。 Laravel 执行初始路由并启动 Angular 客户端,然后发现它需要身份验证并重定向到 /login。从这里开始,它是纯客户端通过 REST 与后端异步通信。如果你问我很漂亮。但;如果用户在某个时候想要刷新浏览器,或者将 url 作为链接发送给某人 - 它会中断。坏的!
例如,在/signup/ 上刷新,会导致 laravel 首先捡起球并通过重定向到默认路由
start/global.php
App::error(function(NotFoundHttpException $exception, $code) {
$allowed = array("api","css","fonts","html","img","js");
if(0 == count(array_intersect(array_map('strtolower', explode(' ', Request::path())), $allowed))) {
return Redirect::route('home');
}
});
这导致我失去了用户最初试图到达的地方。一旦 angular 获得控制权,原始路线就会丢失,它只能再次呈现/login。我猜如果我在 .htaccess 中做一些魔术,我可以松开错误处理程序,目前标准HTML5 boilerplate .htaccess +
<IfModule mod_rewrite.c>
Options +FollowSymlinks
Options -MultiViews
# Options +SymLinksIfOwnerMatch
IndexIgnore */*
RewriteEngine On
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# otherwise forward it to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
.htaccess 和 apache 配置对我来说是个大黑洞。我觉得它一点也不直观。
对于在 Laravel 上运行的单页应用,当用户直接刷新或启动 URL 时,如何确保用户获得正确的角度视图?
【问题讨论】:
-
你可能需要在那里做一些js操作。
-
Javascript?这听起来不对。我希望服务器端响应用户使用 Angular 客户端输入的任何 URL。通过这个,我认为我需要让 apache 认为任何 url 都应该是 index.php,让 laravel 认为任何 url 都应该是客户端,而不是重定向(它会以破坏性的方式重写 url(?)),但是将整个 url 转发给客户端。您知道通过 javascript 重定向后获取原始 url 的方法吗?
标签: .htaccess angularjs laravel