2016-11-01 53 views
0

我花了幾個小時試圖解決這個ERR_TOO_MANY_REDIRECTS沒有成功。錯誤太多REDIRECTS debbuged

,當我訪問我的網站的網址不被記錄在它發生所以,如果我沒有做一個會議開始,我會被重定向到 - > mywebsite.com/site/login或只是/登錄

的PHP代碼,使這是下面:

if (isset($_GET['p2k_url']) && $_GET['p2k_url']) { 

     if (strstr($_GET['p2k_url'], '/')) { 

      $url = explode('/', $_GET['p2k_url']); 

     } else { 
      $url[0] = $_GET['p2k_url']; 
     } 

     if (!isset($url[1]) || !$url[1]) { 
      $url[1] = 'index'; 
     } 
    } 

    if ($url[0] != 'login' && !$__usuCod) { 
     header('Location: /site/login.php'); 
     die(); 
    } 

    if (file_exists(SITE_DIR.DS.'_'.$url[0].DS.$url[1].'.php')) { 

     include SITE_DIR.DS.'_'.$url[0].DS.$url[1].'.php'; 

    } else { 

     if (file_exists(SITE_DIR.DS.'_'.$url[0].DS.'no404.php')) { 
      include SITE_DIR.DS.'_'.$url[0].DS.'index.php'; 
     } else { 
      include SITE_DIR.DS.'_404'.DS.'index.php'; 
     } 
    } 

就在這裏:if ($url[0] != 'login' && !$__usuCod) {

我的login.php只是一個簡單的HTML表單與頁面。沒有什麼可擔心的。

雖然我的主要的.htaccess低於我認爲它可能有一些有:

選項-Indexes

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^(.*)$ index.php?p2k_url=$1 [QSA,L] 
</IfModule> 

爲了調試和查找錯誤,當我運行尾-f訪問日誌我只得到簡單的訪問請求:

127.0.0.1 - - [01/Nov/2016:11:16:28 -0200] "GET /site/login.php HTTP/1.1" 302 - 

沒有什麼來error_log強硬。

做reserashes我看到這是WP上的一個非常comum問題 - 這不是這裏的情況。有任何想法嗎?

感謝

+0

'if(isset($ _ GET ['p2k_url'])&& isset($ _ GET ['p2k_url'])){if(strstr($ _ GET ['p2k_url']' /')){$ url = explode('/',$ _GET ['p2k_url']);} else {$ url [0] = $ _GET ['p2k_url'];} if(!isset($ url [1 ])){$ url [1] ='index';}} if($ url [0]!=='login'&&!$ __ usuCod){header('Location:/site/login.php'); (file_exists(SITE_DIR.DS。'_'。$ url [0] .DS。$ url [1]。'。php')){include SITE_DIR.DS。'_'。$ url [0] .DS。$ url [1]。'。php';} else {if(file_exists(SITE_DIR.DS .'_'。$ url [0] .DS.'no404.php')){include SITE_DIR .DS。'_'。$ url [0] .DS.'index.php';} else {include SITE_DIR.DS .'_ 404'.DS.'index。php';}}' –

+0

只需在你的htaccess文件中添加'RewriteCond%{REQUEST_FILENAME}!-d'和'RewriteCond%{REQUEST_FILENAME}!-f'。 – Federkun

+0

@Federkun我已經做到了,但沒有任何變化...... – Filipe

回答

1

所以你重定向到/site/login.php,你的重寫更改index.php?p2k_url=site/login.php

$url將是['site', 'login.php']數組(我要爆炸前務必倒是trim($x, '/')字符串)。

然後你測試是否$url[0] != 'login'這將永遠是真的[0]site。您需要測試$url[1] != 'login.php'是否先修剪文件擴展名。

如果你想允許/site/login/login那麼你只需要爲此制定一個規則。如果/site/xxx總是等於/xxx然後只需從$ URL刪除第一個數組索引如果$url[0] == 'site'(或標準化您的網址的正確)

一個真正有用的調試技術我在早期所用的是同die()exit沿着var_dumpprint_r 。使用類似die('xxx')的東西,並在腳本中上下移動以確定重定向發生的位置,然後打印出變量以查看它們包含的內容,並檢查您的正確比較結果。這是一個粗略的方法,但它的工作原理

+0

是的,我通常使用dump或print_r進行調試,但在這種情況下,它並沒有帶來我所需要的。 btw print_r($ url)是Array([0] => login.php [1] =>索引) – Filipe

+0

爆炸之前'$ _GET ['p2k_url']'的值是什麼,因爲我不能如果你的問題中描述的URL是'login',那麼看看'index'是如何的 – Lee