Autor Zpráva
Supel
Profil *
Zdravím

Mám problém s přesměrováním includované hlavní stránky.

Před lety jsem udělal chybu a místo toho, abych do MENU/Úvod dal adresu http://www.r-s.wz.cz, inkludoval jsme tam obsah přes index.php?page=00.

Nyní jsme to opravil, tak jak to mělo být ze začátku, jenže již vzniklo cca 1600 odkazů s index.php?page=00.
Všechny tyto odkazy nyní končí v 404:-(

Dokážete mne poradit? Myslím, že Webzdarma pustí jen redirect.

Já jsme se pokoušel sám, ale dosáhl jsem jen zacyklení nebo nefunkčnosti.

Děkuju za odpověď.

Supel
Rellik
Profil
Taky zdravím. Nějak nechápu pointu dotazu. Odkazované stránky jak vidno fungují v pořádku - zkoušel sem klikat na různé odkazy, ale ani jednou jsem eror nedostal. Krom toho ?page=00
Takže poradit asi nepůjde, když nebude pořádně vysvětlen problém. A ukázku, kde je těch 1600 odkazů..
Supel
Profil *
Rellik:
Problém je v tom, že nechci, aby se mi zobrazovala 404 na ?page=00 a to jde udělat jen přesměrováním.
Je blbé, když přijde návštěvník a skončí na 404.
Nemůžu říct všem, ať si přijmenují odkaz a taky nechci používat ?page=00

Ty odkazy jsou naměřeny na google webmaster tool:

Nejčastěji odkazovaný obsah
/index.php?page=00
1 627
http://www.r-s.wz.cz/
335
/index.php?page=22
28
/index.php?page=stenatka
17
/index.php?page=23
7
Supel
Profil *
Redirect 301 /index.php?page=00  http://www.r-s.wz.cz/

Zkoušel jsem tento redirect, ale nefunguje mi.
Alutom
Profil *
Ahoj,
direktiva Redirect umí podle všeho přesměrovat pouze na jiný server či cestu, ale nemůže změnit GET data poslaná v adrese. Tvůj případ by se ale určitě dal vyřešit i přímo v PHP:

if(isset($_GET['page']) && $_GET['page']=='00') {
  header('HTTP/1.0 301 Moved Permanently');
  header('Location: http://www.r-s.wz.cz/');
}

Alutom
Supel
Profil *
Díky moc, ale nepomohl by si mi to ještě zaimplementovat do mého kódu?

Přiznávám, moc mi to nejde.

<?php   
            if(!isset($_GET['page']))
                    include "index_files/index3.htm";
               else
                    switch ($_GET["page"])
                    {
                    case "01":
                       include "kniha.htm";
                         break;
                         .
                         .
                         .
                         .
                                      default:
                          include "index_files/404.php";
             break; 
                    }
        ?>
Alutom
Profil
Nejjednodušší bude, když to dáš hned úplně na začátek za počáteční <?php. Dej si pozor, aby před <?php nebyly žádné další znaky, jinak se přesměrování neprovede...
Supel
Profil *
Alutom:
Warning: Cannot modify header information - headers already sent by (output started at /3w/wz.cz/r/r-s/index.php:338) in /3w/wz.cz/r/r-s/index.php on line 536

Je zajímavé, že na jednom webu, kde jsme to zkoušel, to funguje, ale tam, kde to chci použít, ne:-D
Keeehi
Profil
Chyba „Headers already sent …“
Alutom
Profil
Supel:
Já ti říkal, že to máš dát hned na začátek, ale tys to dal na řádek 536 :D. Abychom si tedy rozuměli, kód bude vypadat po úpravě následovně:

<?php // tohle musí být 1. řádek souboru
            // přesměrování:
            if(isset($_GET['page']) && $_GET['page']=='00') {
              header('HTTP/1.0 301 Moved Permanently');
              header('Location: http://www.r-s.wz.cz/');
            }
            
            // původní kód:
            if(!isset($_GET['page']))
                    include "index_files/index3.htm";
               else
                    switch ($_GET["page"])
                    {
                    case "01":
                       include "kniha.htm";
                         break;
                         .
                         .
                         .
                         .
                                      default:
                          include "index_files/404.php";
             break; 
                    }
?>

A jinak samozřejmě zkontroluj existenci BOM signatury. Aby to fungovalo, nesmí tam být. Více se dozvíš v odkazu od Keeehi(ho).
Supel
Profil *
Alutom:
Já to mám na začátku <?php, jenže ten začátek je na 528 řádku.

Mám asi chybu v tom, že jsem špatně poskládat měnící se title a description. Což nevyřeším, protože do php jsme se pouštět nechtěl, jenže to má odpovědi na mé chyby a nemožnost něco udělat.

Mám to takhle:

    <meta name="description" lang="cs" content="<?php switch ($_GET['page']):
case "xyz": echo "XYZ :: "; break;
endswitch;
?>
<title><?php switch ($_GET['page']):
case "xyz": echo "XYZ:: "; break;
endswitch;
?>
Pak mám hlavní stránku, hlavičku, boční panel a hlavní panel,
pak následuje include, které jsme tu už dával.
To bude asi ta chyba.
panther
Profil
Supel:
Já to mám na začátku <?php, jenže ten začátek je na 528 řádku.
musí to být na úplně prvním řádku toho souboru, do nějž includuješ zbytek. Představ si include jako Ctrl+V, proto první řádek includovaného souboru není první řádek výsledného dokumentu.
Supel
Profil *
panther:
Udělal jsme to jak napsal Alutom, ale vyhodilo to tu chybovku:-(
panther
Profil
Supel:
projdi si ještě jednou [#9] a [#10] (poslední větu).
Supel
Profil *
panther:
To bude trvat déle, to už tohle vlákno nebude dávno aktivní.
Musím nastudovat, co je BOM a to co psal Keeehi.

Jak už jsme říkal, php jsme chtěl použít jen pro include, ale pak se to začalo komplikovat:-(
Alutom
Profil
Supel:
Já to mám na začátku <?php, jenže ten začátek je na 528 řádku.

Tak jinak. Na úplný začátek index. php dej tohle:

<?php
  if(isset($_GET['page']) && $_GET['page']=='00') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: http://www.r-s.wz.cz/');
  }
?>

Neřeš, co se dělá nebo nedělá dál, tohle přesměrování se prostě provede, pokud je ?page=00. Řádek číslo jedna tohoto kódu musí být řádek číslo jedna v souboru index.php. Líp už to fakt popsat neumím, tak snad je to teď jasné.
Supel
Profil *
Si měl říct hned, že až tak nahoru=-o

<?php
  if(isset($_GET['page']) && $_GET['page']=='00') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: http://www.r-s.wz.cz/');
  }
?>

<?php echo "<?xml version=/'1.0/' encoding=/'windows-1250/'?> "?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
Alutom
Profil
Supel:
Si měl říct hned, že až tak nahoru=-o

Já totiž netušil, že před tím skriptem ještě něco máš... Navíc jsem psal: „Dej si pozor, aby před <?php nebyly žádné další znaky, jinak se přesměrování neprovede...“ Ale nevadí, hlavně že už to konečně funguje :)
Supel
Profil *
Alutom:
Díky moc za trpelivost. Snad už se vyvaruju dalšího rozvoje PHP:-D Nebo se to konečně naučím:-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0