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