2015-08-28 1 views
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 также правильно и заполнены со всей новый URL.

Я хочу, чтобы это произошло с любым запросом URI, но когда я попытался запрос PHP-файл вместо (заменить /folder с /path/to/file.php), который содержит инструкции для переориентирования, статус Возвращается 200, когда он должен быть 301.

Ниже приведен код PHP, используемый в файле PHP.

<?php 
header("HTTP/1.1 301 Moved",true); 
header("Location: /",true); 
?> 

Кто-нибудь знает, как сделать апачский суб-запрос любого домена в локальной сети и в любой файл, а файл вернуть истинный статус и, если состояние 301, иметь его вернуть новый истинный место нахождения? Если да, пожалуйста, сообщите.

ответ

0

Как насчет использования ErrorDocument?

Если пользователь запрашивает файл, который не найден по запросу, ErrorDocument 404 может загрузить страницу .php, которая ищет файл.

http://httpd.apache.org/docs/2.4/custom-error.html

+0

Файл не найден другая история. То, что я пытаюсь сделать, - это уменьшить количество цепочек перенаправления *, чтобы вместо перенаправления пользователя на перенаправление, а затем перенаправление, а затем перенаправление и т. Д., Пользователь будет перенаправлен только один раз. – Mike

+0

Извините. Возможно, это поможет другим дать вам лучший ответ, если вы разместите перенаправления, которые вы пытаетесь уменьшить. – user2182349

+0

Каждый из них. Его сложно идентифицировать, поскольку этот код подходит к концу сервера, на котором размещено много веб-сайтов, поэтому я делаю каждому гостю услугу (пытается сделать) один модуль, который уменьшает требуемые переадресации до максимум. – Mike

Смежные вопросы