Autor Zpráva
tomak
Profil *
Dobrý den,

potřebuji menší radu ohledně přepsání adresy pomocí mod_rewrite.
Prostudoval jsem asi 20 článků zabývající se touto problematikou, ale zatím jsem to úplně nepochopil. Proto prosím o radu.

Na webu mám odkazy typu:

neco.cz/index.php
neco.cz/index.php?sekce=sekce1
neco.cz/index.php?sekce=sekce1&clanek=clanek1

A chtěl bych to přepsat jako

neco.cz/hlavni-strana.html
neco.cz/nazev-sekce/
neco.cz/nazev-sekce/nazev-clanku.html

Jak by vypadalo? Děkuji opravdu moc za rady.
Davex
Profil
Adresu předáš PHP skriptu, kde si jí rozložíš a převedeš podle potřeby - Řešení některých častějších problémů (FAQ) » Univerzální obecné pravidlo.
Taps
Profil
tomak:
doporučuji http://mike.treba.cz/mod_rewrite-a-hezke-url-dil-ii/
tomak
Profil *
Jestli to tedy dobře chápu, tak když vložím do .htaccess tohle:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?parametr=$1

a v index.php budu mít tohle:
<?php

if($_GET["parametr"] == NULL){

// zde bude kód pro index

}
else{

        $dotaz="SELECT * FROM clanky WHERE url = " . intval($_GET["parametr"]) . "";
        $vysledek = MySQL_Query($dotaz); 
        while ($zaznam = MySQL_Fetch_Array($vysledek)){
                $textclanku=$zaznam["textclanku"];
                echo "<p>".$textclanku."</p>"; 

        }     


        $dotaz="SELECT * FROM sekce WHERE url = " . intval($_GET["parametr"]) . "";
        $vysledek = MySQL_Query($dotaz); 
        while ($zaznam = MySQL_Fetch_Array($vysledek)){
                $idsekce=$zaznam["id"];
                $nazevsekce=$zaznam["nazevsekce"];
                echo "<h1>".$nazevsekce."</h1>"; 

               //dalsi dotaz pro zobrazeni clanku v sekci
        }   

}

?>
Zadám odkaz typu: "domena.cz/moje-stranky.html" =>> předá se parametr "moje-stranky.html" =>> najde v databázi jestli taková stránka nebo sekce existuje a podle ní to zobrazí.

Chápu to správně?
Davex
Profil
V podstatě ano, ale konkrétně v této ukázce se článek hledá podle čísla na začátku adresy, což je asi špatně.
tomak
Profil *
Co takhle?:)

$url = $_GET["page"];
  
$dotaz="SELECT * FROM clanky WHERE url = \"".$url."\"";
Kajman
Profil
Takhle je to náchylné na sql injection. Pro stringy použijte mysql_real_escape_string. Místo while zkuste využít if a na konci nezapomeňte na návratový kód 404 a chybovou zprávu pro případ neúspěsného nalezení.
tomak
Profil *
Co takhle?

$url = mysql_real_escape_string($_GET["page"]);

        if ($dbclanky = MySQL_Fetch_Array(MySQL_Query("SELECT * FROM clanky WHERE url = \"".$url."\""))){
                $clanky_clanek=$dbclanky["clanek"];
                echo "<p>".$clanky_clanek."</p>"; 
         }        
         elseif ($dbsekce = MySQL_Fetch_Array(MySQL_Query("SELECT * FROM menu WHERE url = \"".$url."\""))){
                $idsekce=$dbsekce["id"];
                $nazevsekce=$dbsekce["nazev"];
                echo "<h1>".$nazevsekce."</h1>"; 
 
               //dalsi dotaz pro zobrazeni clanku v sekci
        }
        else { 
            
            echo "nebyla nalezena zadna shoda!"; 
            
        }

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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