2013-05-16 2 views
0

У меня есть многомерный языковой сайт. При вызове страницы, которая не существует, .htaccess будет ссылаться на 404.php в корневом направлении.

.htaccess выглядит следующим образом:

ErrorDocument 404 /404.php 

Это 404.php в направлении корня просто выглядит, который по умолчанию язык устанавливается в SESSION или COOKIE и относится к языку subdirection /language/404.php

Корень 404.php выглядит например:

include_once "scripts/pref_language.php"; 

if (isset ($_GET['uri']) === true){ 
    $get = $_GET['uri']; 

    header("Location: /$pref_language/404.php?uri=$get"); 
    exit; 
} 

$url = urlencode($_SERVER['REQUEST_URI']); 

header("Location: /$pref_language/404.php?uri=$url"); 

Refered к языку subdirection, посланной URL выглядит следующим образом:

http://www.example.com/english/404.php?uri=somedata 

или другой язык:

http://www.example.com/german/404.php?uri=somedata 

Код /english/404.php выглядит так:

<?php 
error_reporting(E_ALL); 
ob_start(); 
session_start(); 
header ("Content-Type: text/html; charset=utf-8"); 

include_once "../scripts/db_connect.php"; 
include_once "../scripts/functions.php"; 
include_once "../scripts/browser_identification.php"; 
include_once "../scripts/pref_language.php"; 

...some text variables in its specific language 

include_once "../templates/template_404.php"; 
?> 

шаблон всего лишь HTML стиль. Нижний колонтитул, который будет включен в template_404.php, является главной достопримечательностью для отправки данных. В этом нижнем колонтитуле есть возможность изменить настройку языка и переключение между языковыми путями. Если будет отправлен form, то SESSION и COOKIE будут изменены, и страница начнет функцию заголовка.

Так вот код из сноски:

if (isset($_GET['uri'])) { 
    $uri = urlencode($_GET['uri']); 
    echo "TEST URI: $uri"; 
} 

$en_dir = '../en/'; 
$de_dir = '../de/'; 
$fr_dir = '../fr/'; 
$pl_dir = '../pl/'; 
$tr_dir = '../tr/'; 

... 

$basename = basename($_SERVER['SCRIPT_NAME'], ".php"); 

if ($basename === "index") { 
    $form_action = rtrim($_SERVER['PHP_SELF'], 'index.php'); 
} else{ 
    $form_action = htmlentities($_SERVER['PHP_SELF']); 
} 

... 

if (isset($_POST['pref_lang']) === true) { 

    $content = $_POST['pref_lang']; 

    if ($content === "de") { 

     if ($basename === "about") { 
      $basename = "info"; 
     } else if ($basename === "contact") { 
      $basename = "kontakt"; 
     }   
    } 
    $_SESSION['pref_language'] = $_POST['pref_lang']; 

    setcookie('pref_language', '', time()- 999999, '/', '.example.de'); 
    setcookie('pref_language', $content, time()+60*60*24*365, '/', '.example.de'); 

    if ($basename === "404"){ 

     header("Location: ../$content/404.php?uri=$uri"); 

    } else { 

     header("Location: ../$content/$basename"); 
    } 
} 
?> 
<div id="data"> 
    <fieldset> 
     <ul> 
      <li> 
       <form action="<?php echo $form_action;?>" method="post">  
        <input type="submit" id="de" name="pref_lang" value="de"/><label for="de">german</label> 
       </form> 
      </li> 

      <li> 
       <form action="<?php echo $form_action;?>" method="post"> 
        <input type="submit" id="fr" name="pref_lang" value="fr"/><label for="fr">french</label> 
       </form> 
      </li> 

      <li> 
       <form action="<?php echo $form_action;?>" method="post"> 
        <input type="submit" id="pl" name="pref_lang" value="pl"/><label for="pl">polish</label> 
       </form> 
      </li> 

      <li> 
       <form action="<?php echo $form_action;?>" method="post"> 
             <input type="submit" id="tr" name="pref_lang" value="tr"/><label for="tr">turkish</label> 
       </form> 
      </li> 

     </ul> 
    </fieldset> 
</div> 

Проблема заключается в том, что, когда страница имеет URL из

http://www.example.com/**english**/404.php?uri=somedata 

и я представлю $_POST изменить язык на немецкий как :

http://www.example.com/**german**/404.php?uri=somedata 

например $_GET['uri'] будет пустым, а URL-адрес будет выглядеть следующим образом:

http://www.example.com/**german**/404.php?uri= 

после запуска функция заголовка. Вместо заголовка я попытался отобразить эту строку, и я получу сообщение, что uri не определен.

Undefined variable: uri in /customers/7/4/1/example.com/httpd.www/scripts/footer_en.php on line 102 
Location: ../english/404.php?uri= 

Странная о том, что когда я буду называть страницы перед отправкой $_POST и посмотреть на исходный код сайта переменная $uri будет считана параметр $_GET правильно, но позже она не работает больше в функции заголовка?

Так что было бы хорошо, если кто-нибудь скажет мне, что делать, чтобы получить эту проблему. Я действительно был бы признателен.

Спасибо большое.

+0

Почему произвольно останавливается на двух уровнях логического сравнения? Почему бы не 'if (((isset ($ _ GET ['uri']) === true) === true) === true)'? – deceze

+0

Извините, я не понял. можете ли вы объяснить немного дальше? – bonny

+0

Вам не нужно сравнивать возвращаемое значение 'isset' строго с логическим значением, которое создаст другое логическое значение, которое' if' затем оценивает. 'isset' уже возвращает логическое значение, просто' if (isset (...)) 'отлично. Просто стиль кодирования nitpick. – deceze

ответ

0

Добавьте uri в свою форму, прежде чем использовать его в своих формах.

$form_action .= "?uri=" . $uri; 
+0

привет и спасибо за ответ. при добавлении это вызывает ошибку, что $ _SERVER ['PHP_SELF'] будет тем же самым URL-адресом, что и раньше. Изменения в SESSION/COOKIE вступают в силу, но языковой каталог не будет изменен из-за $ _SERVER ['PHP_SELF'] – bonny

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