我们目前有一个完整的角度项目运行在我们的服务器上的一个子dir和一个物理的“设备”使用硬编码的URL发送一个用户到该页面。
我正在寻找某种方式,通过PHP脚本“拦截”请求(例如,不是真正的目的),查看该浏览器页面的请求"ID“param是否启用了查看浏览器页面的选项,或者用户是否已将其配置为返回HTTP 406响应(例如)。
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,但是要“绕过”前面的拦截器。
关于最后那部分,我现在有问题。因为它是角的,而且它使用路径,所以我不能只说“好的,重定向到index.html而不是index.php”,因为它需要类似于..com/app/routing-view?id=1234 (而index.html位于/app目录中)。
如果可以避免,我不想将PHP代码添加到原始的角索引文件中。
我是否认为这是正确的,还是会有另一种更有效的方法来解决这个问题?
这一切的原因是,我希望(例如)向设备返回不同的HTTP代码或不同的头,而不是200个html头响应,即使ID被禁用或类似的情况。
发布于 2019-05-29 15:35:10
它通过一个简单的.htaccess、一个参数和一个“拦截器”脚本来工作。非常简单和基本的,真的,不知道为什么我的大脑不走这条路之前,我的问题。
.htaccess添加到角应用程序的根中。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脚本“服务”角度的内容,而不是重定向到它。
https://stackoverflow.com/questions/56356518
复制相似问题