1
我创建了一个apache模块,可以防止用户通过一连串的重定向页面来检索他们最终想要的页面。这是到目前为止我的代码:通过定制apache模块避免登陆页面重定向
#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
#include "http_log.h"
static int subreq_handler(request_rec *r){
if(ap_is_initial_req(r)){
r->content_type = "text/html";
apr_table_set(r->headers_out, "Hostname","127.0.0.2");
request_rec* rr=ap_sub_req_method_uri("GET","/folder",r,NULL);
if (rr){
char *l=apr_table_get(rr->headers_out, "location");
ap_rprintf(r,"redir=%s\n", l);
ap_rprintf(r,"rr->status=%d\n", rr->status);
ap_destroy_sub_req(rr);
}
return DONE;
}
}
static void subreq_register_hooks(apr_pool_t *p){ap_hook_fixups(subreq_handler, NULL, NULL, APR_HOOK_FIRST);}
module AP_MODULE_DECLARE_DATA subreq_module={STANDARD20_MODULE_STUFF,NULL,NULL,NULL,NULL,NULL,subreq_register_hooks};
代码返回状态301,当我在与实际文件夹名称代码替换/folder
没有斜线和REDIR值也是正确的,与整个填写这是个好新的网址。
我想这与任何URI请求的发生,但是当我试图请求一个PHP文件,而不是(更换/folder
与/path/to/file.php
),其中包含的指令重定向,返回的状态是200,但是应该是301
的以下是PHP文件中使用的PHP代码。
<?php
header("HTTP/1.1 301 Moved",true);
header("Location: /",true);
?>
有谁知道如何使一个Apache子请求任何域本地网络上的任何文件,具有文件返回的真实状态,如果状态为301,使其返回新真位置?如果是这样,请告知。
文件未找到是一个不同的故事。我想要做的是*减少重定向链*的数量,这样,而不是用户被重定向到重定向然后重定向然后重定向等,用户只会被重定向一次。 – Mike
对不起。也许它会帮助别人给你一个更好的答案,如果你发布你试图减少的重定向。 – user2182349
每一个。由于这段代码将进入托管许多网站的服务器的后端,因此很难将它们全部识别出来,所以我正在通过(试图制作)一个模块将所有重定向减少到最多。 – Mike