我们目前在服务器的子目录中运行着一个完整的Angular项目,并使用硬编码URL将用户发送到该页面,是一个物理“设备”。
我正在寻找一种通过PHP脚本“拦截”请求的方法,以便首先(例如,不是真正的目的)查看该浏览器页面所请求的“ ID”参数是否启用了以下选项:查看浏览器页面,或者是否已被用户配置为返回406 HTTP响应。
Currently:
- ..com/app/routing-view?id=1234 => Angular view -> fetch info
Idea:
- ..com/app/routing-view?id=1234 => PHP-script -> isValid => forward to angular and do a normal 'webview' -> fetch info
- ..com/app/routing-view?id=2889 => PHP-script -> notValid => HTTP code
我考虑过使用.htaccess来“拦截” URL并将其转发到.php文件。做魔术,然后在此处进行检查,然后将浏览器转发到原始URL,但“绕过”先前的拦截器。
关于我当前遇到的最后一部分。因为它是Angular并且正在使用路径,所以我不能只说“好吧,重定向到index.html而不是index.php”,因为它需要类似..com/app/routing-view?id=1234
(并且index.html位于在/app
目录中。
如果可以避免的话,我不想将PHP代码添加到原始Angular-index文件中。
我是在看这个权利,还是会有其他更有效的方法来解决这个问题?
所有这些的原因是,我想(例如)向设备返回一个不同的HTTP代码或不同的标头,而不是返回200 html标头响应,即使该ID最终被禁用或诸如此类。 / p>
答案 0 :(得分:0)
通过一个简单的.htaccess
,一个参数和一个“拦截器”脚本使其工作。确实非常简单和基本,不确定在发布问题之前为什么我的大脑没有走这条路。
.htaccess
添加到Angular应用程序的根目录中。RewriteEngine On
# Check if the request has been intercepted before (via URL parameter)
RewriteCond %{QUERY_STRING} !(^|&)intercepted=true
# .. If not, rewrite the page to use the interceptor script (only if it matches the route).
RewriteRule ^my-route dir-of-script/extra/interceptor.php?url=https://%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING} [L,QSA]
# Other stuff for rewriting the Angular routes etc
...
/dir-of-script/extra/interceptor.php
类似脚本,该脚本从GET参数解析URL,获取信息,进行检查并根据结果进行显示,返回输出或重定向页面并让其通过。这会向原始URL添加一个..&intercepted=true
参数,以使.htaccess
不会再次拦截它。
这似乎像一种魅力(就我的情况而言)。唯一的“缺点”是,当允许它通过时,它被视为重定向,而不仅仅是重写。将进一步研究它,也许让PHP脚本“提供” Angular内容,而不是重定向到它。