• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

.htaccess oraz header("Location..") pętla przekierowań. Jak obejść ten problem?

Object Storage Arubacloud
0 głosów
1,013 wizyt
pytanie zadane 18 czerwca 2017 w PHP przez R[a]=d(ek); Mądrala (6,370 p.)

Cześć! 

Mam taki problem można powiedzieć u samych podłoży..  W pliku .htaccess cały ruch kieruję na index.php i zapisuje do zmiennej get URL_STRING 

później w osobnym pliku w funkcji LOAD_VIEW() tą zmienną rozbijam na fragmenty explodem  - explode("/", $_GET['URL_STRING'])[0] 

i w taki oto sposób dostaję coś na wzór: http://adres.pl/WIDOK_KTORY_ZALADOWAC/reszta/to/zmienne/ktore/moge/użyć/w/widoku


w pliku index.php 

dołączam plik z funkcją LOAD_VIEW;

i po prostu ją wywołuje. Ładuje się widok z katalogu widoki o nazwie z tego get'a explode("/", $_GET['URL_STRING'])[0]

No i........

I tu cały problem.. Gdy chcę użyć funkcji  header("Location: ./gdzies/cos/jakos"); w index.php lub też w pliku znajdującym się w katalogu widoki 

to wywala mi pętle przekierowań...  Rozumie że problem dzieje sie przez to że cały ruch kieruje na index.php a skoro w index.php jest header location to i tak on skieruje mnie na index.php i tak w kółko... 

Jak temu zaradzić? 
 

Plik .htaccess 

 

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?URL_STRING=$1 [QSA,L]

 

Zaznaczę że nie chce żadnych gotowców całych frameworków opartych o MVC itp.. chcę coś w tym stylu zrobić ale bardzo prostego.. 

Za każdą radę z góry dzia. 

2 odpowiedzi

+1 głos
odpowiedź 18 czerwca 2017 przez CzikaCarry Szeryf (75,340 p.)
Kiedy dokładnie wywołujesz przekierowanie? Być może w tym leży problem :)
komentarz 18 czerwca 2017 przez R[a]=d(ek); Mądrala (6,370 p.)
Szczerze mówiąc już wywoływałem je wszędzie gdzie sie dało. Przed funkcją LOAD_VIEW po funkcji oraz w pliku który jest w funkcji - mam ma myśli pliku ładowanym przez funkcje..

Już pomysłów na to nie mam..
komentarz 18 czerwca 2017 przez CzikaCarry Szeryf (75,340 p.)
Pokaz kod index.php :D
+1 głos
odpowiedź 18 czerwca 2017 przez Ivan Maniak (60,650 p.)
Nieskończone przekierowania nie są spowodowane tym, że wszystko idzie na index.php, a tym że po wejściu w adres znów chcesz gdzieś użytkownika przekierować.

Wygląda to mniej więcej tak: user wchodzi pod /x, a w nim przekierowanie na /y. user wchodzi na /y — przekierowanie na /y (/y zawsze przekierowuje na /y) lub /x (/x zawsze przekierowuje na /y i vice versa) i powstaje pętla.

Najłatwiej będzie pomóc jak pokażesz cały kod :)
komentarz 18 czerwca 2017 przez R[a]=d(ek); Mądrala (6,370 p.)
Zaraz wrzucę kodziksy
komentarz 18 czerwca 2017 przez R[a]=d(ek); Mądrala (6,370 p.)

plik: .htaccess 

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?URL_STRING=$1 [QSA,L]

 

plik: index.php 

 

<?php
for($_=0;$_<substr_count(dirname(__FILE__),"/")-1;$_++){$MAIN_PATH.="../";} require_once $MAIN_PATH."systemInit.php";

__use($MAIN_PATH, array( 
    KERNEL, 
    DATABASE
));



header("Location: ".APPLICATION_URL."gdzies/cos/jakos");


?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>FACEDEAL</title>
        <base href="<?= APPLICATION_URL; ?>">

        <script src="system/librays/jquery/jquery-3.1.1.min.js" type="text/javascript"></script>

    </head>
    <body>
        
        <div id="mainContent"></div>

        <?php
            
        loadInterface();
    
     
        
        ?>
        
     

    </body>
</html>


plik: systemInit.php 

<?php
session_start();

define("APPLICATION_URL", "http://mojurlaplikacj/");

define("KERNEL", "system/kernel/kernel.php");

function __use($MAIN_PATH, $arrayLibsPathes)
{
    foreach ($arrayLibsPathes as $libray)
    {
        if(file_exists($MAIN_PATH."$libray"))
        {
            include_once $MAIN_PATH."$libray";
        }
        else 
        {
            echo "Błąd ładowania dla: ".$MAIN_PATH."$libray";
        }
        
    }
    
} 

plik: kernel.php 


function loadInterface($InterfaceName="", $ShowRedictUrl = FALSE )
{
    
    if($InterfaceName != "" && $InterfaceName != " " && $ShowRedictUrl == TRUE)
    {
        //echo "Przekieruj do ". APPLICATION_URL.$InterfaceName. " z przeładowaniem url";
        ?>
        <script>
            // już na wszstie sposoby kombinacje były z header location i javascriptem
           window.location.replace("<?= APPLICATION_URL.$InterfaceName; ?>");
            
        </script>

        <?php
    }
    else if($InterfaceName != "" && $InterfaceName != " ")
    {
        $InterfaceName = $InterfaceName;
    }
    else 
    {
        if(!empty($_GET['URL_STRING']))
        {   
            $InterfaceName = explode("/", $_GET['URL_STRING'])[0];

            if($InterfaceName[strlen($InterfaceName)-1] == "/")
            {
                $InterfaceName = substr($_GET['URL_STRING'], 0, -1);
            }   
        }
        else 
        {
            $InterfaceName = "main";
        }
    }

    if(file_exists("./system/views/Interfaces/$InterfaceName/interface.php"))
    {
        ?>

            <script>
                $.ajax({
                    type: 'POST',
                    url: "./system/views/Interfaces/<?=$InterfaceName;?>/interface.php",
                    beforeSend: function (xhr) {
                        $("#mainContent").hide().html('<div class="loading"> <div style="text-align: center;">ładowanie</div><div class="loader"><span class="dot1"></span><span class="dot2"></span><span class="dot3"></span><span class="dot4"></span></div></div>').fadeIn(1000);
                    },
                    success: function (data, textStatus, jqXHR) 
                    {
                        
                        $('head').append('<link rel="stylesheet" type="text/css" href="system/views/Interfaces/<?=$InterfaceName;?>/data/css/interfaceStyle.css">'); 
                        $('head').append("<script src='system/views/Interfaces/<?=$InterfaceName;?>/data/js/interfaceFunctionsUi.js'></"+"script>"); 
                        $("#mainContent").html(data);
                        
                    }
                });

            </script>
            
        <?php
        
        
    }
    else 
    {
        
        echo "Nie można załadować ekranu aplikacji.<br>";
    }

    
}

 

komentarz 18 czerwca 2017 przez R[a]=d(ek); Mądrala (6,370 p.)
funkcja loadInterface($InterfaceName="", $ShowRedictUrl = FALSE )

działa na takiej zasadzie..

 

przyjmuje 2 parametry... pierwszy to jaki widok ma załadować 2 parametr to czy podczas ładowania tego widoku ma przeładować url czy nie.. jeśli nie podamy tej funkcji parametrów to ona zaciągnie sama z adresu co ma załadować a jeśli nie ma nic w adresie to załaduj widok "main" - główny..

To tak w wielkim skrócie...
komentarz 18 czerwca 2017 przez Ivan Maniak (60,650 p.)

No przecież w 11. linijce index.php masz:

header("Location: ".APPLICATION_URL."gdzies/cos/jakos");

I przez to zawsze będzie przekierowanie, nie ważne pod jaki adres URL wejdziesz.

komentarz 18 czerwca 2017 przez R[a]=d(ek); Mądrala (6,370 p.)
Oki tak wiem, to to zostało z celów testowych... Bo już kombinowałem na pałe itp..  Sory że przez to mogłem wprowadzić w błąd.

 

Ale zobacz jak jest funkcja od ładowania widoku / interfejsu.. loadInterface()

to ona przyjmuje mi 2 parametry, pierwszym parametrem jest nazwa co ma załadować zaś drugim jest to czy podczas ładowania ma przeładować url czy też nie.. Jeśli nie podam nic w funkcje ona sama sobie pobiera widok do załadowania z url'a  ale jeśli nie ma nic w url to załaduj widok main

 

Teraz jak wywołam funkcję

 

loadInterface( "pomoc", true );

 

to wystąpi zapętlenie

Podobne pytania

0 głosów
0 odpowiedzi 253 wizyt
0 głosów
0 odpowiedzi 470 wizyt
0 głosów
0 odpowiedzi 128 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...