Autor Zpráva
Yuhů
Profil
Nechápu, jak funguje mod_rewrite, ale věřím, že mi to někdo vysvětlíte. Prosím, nechte si od cesty dohady, chci radu od někoho, kdo můj dotaz pochopí a ví, o čem píše.

Vím, jak funguje mod_alias. Prostě na staré adrese vrátí přesměrování 301 na novou adresu. Pohoda, to je jasné.

Teď situace, kterou řeším: dejme tomu, že

mám skript index.php

a aplikaci napsanou tím způsobem, že URL mají tvar
/adresar/index.php?cislo=12345

potřeboval bych, aby se čtenářům i vyhledávačům taková adresa jevila třeba jako
/adresar/12345.html

Tolik zadání problému. Teď vysvětlím, čemu nerozumím:

Umím napsat pravidlo pro mod_alias, který mi adresu
/adresar/index.php?cislo=12345
přesměruje na
/adresar/12345.html
(prostě index?cislo=12345 -> 12345.html)

ale k čemu mi to je, když na adrese 12345.html nic nemám?

A dotaz:
Dá se napsat pravidlo pro mod_rewrite tak, že nebudu muset aplikaci s url ?cislo=45656 přepisovat, tvořit žádné další soubory, ale zároveň uživatel/vyhledávač uvidí adresu 45656.html se stejným obsahem?
Leo
Profil
To funguje naopak / adresu lidsky citelnou prepises na adresu dynamickou, Leo
Yuhů
Profil
> adresu lidsky citelnou prepises na adresu dynamickou, Leo

a to mi bude dobré k čemu?

Vyhledávač pak uvidí dynamickou adresu, takže v ní nepozná klíčová slova.
Leo
Profil
Pokud napises

RewriteEngine On
RewriteRule /adresar/(.*)\.html /adresar/index.php?cislo=$1

Tak pro okolni svet bude EXISTOVAT stranka rekneme ahoj.html, prohlizec si ji vyzada, dostane normalne kod, 200 OK a obsah stranky. Ovsem Apache a mod_rewrite ve skutecnosti posila obsah stranky

index.php?cislo=ahoj

Leo
Leo
Profil
Vyhledavac dynamickou adresu index.php?cislo=12345 vubec neuvidi, protoze do vsech odkazu nacpes 12345.html... Leo
Leo
Profil
Jinak receno, pomoci mod_rewrite vytvoris pro tvoje stranky, at uz dynamicke nebo staticke, synonymum. Skutecny nazev stranky se nikdy nemusi dostat ven, pokud ho neuvedes v odkazu apod. A vzhledem k tomu, ze vytvareni synonyma pouziva regularni vyrazy a muzes psat podminky s pouzitim serverovych promennych (RewriteCond), je to mocna zbran, az treba k necemu takovemu :-) :

http://jeremy.zawodny.com/blog/archives/000826.html

Leo
izsak
Profil
Este mala poznamka:
Pri adrese 12345.html Apache interne pošle požiadavku na súbor index.php?cislo=12345 ale subor znovu presmeruje (internu) poziadavku na 12345.html. Aby sa to nezacyklilo, treba to v index.php osetrit podmienkou, napr. prepisovat adresu na index.php?cislo=12345&rewrited=true.
Leo
Profil
"ale subor znovu presmeruje (internu) poziadavku na 12345.html"

To nechapu, muzete mi to osvetlit? Leo
pmasarik
Profil *
Chapem ako urobim pomocou mod_rewrite z index.php?cislo=12345 ---> 12345.html
To ma pri poziadavke na 12345.html presmeruje na index.php?cislo=12345, potialto to chapem a aj mi to funguje, ale ako zabespecim aby uz v samotnej stranke tiez figurovali tie odkazi ako 12345.html a nie ako index.php?cislo=12345

Toto som doteraz nepochopil, a znenit to v PHP aby mi to tak generovalo mi nedava zmysel, naco by bol potom ten mod_rewrite ked by mi uz samotne PHPcko generovalo akoze tie staticke stranky?
http://www.areaseo.c om
Profil *
<a href='http://www.yahoo.com'></a>Welcome! http://www.areaseo.com/improvepr/ <a href='http://www.areaseo.com'>improve pagerank default</a>. <a href="http://www.areaseo.com ">PageRank 11</a>: Web Site Analysis, SE marketing, High Rankings. Also [url]http://www.areaseo.com/linksale/[/url] and [link=http://www.areaseo.com]google rank 20[/link] from pagerank .
http://www.areaseo.c om
Profil *
Welcome!!! http://www.areaseo.com/contacts/ google pr. pagerank 5: Web Site Analysis, SE marketing, High Rankings. Also online pr16 from google pr .
http://www.areaseo.c om
Profil *
hello! http://www.areaseo.com/contacts/ google pr. Web Site Analysis, SE marketing, High Rankings. From google pr .
mila
Profil
Klíčové je písmenko R za pravidlem. To ve výsledku vlastně úplně obrací, co se děje.

Pokud tam není, tak jen tiše namapuje požadavek na nějaký soubor. Typicky soubor 123456.html neexistuje, tak řekne, že to má zpracovat index.php. Uživatel nic neví. Je to podobný proces, jako když požadavek na adresář zpracuje index.php

Pokud je R na konci, tak pošle hlavičku redirect, ve které je nová lokace. Tu dostane klient, a pošle si nový požadavek. Tzn. v adresním řádku je nová adresa a toto přesměrování může jít klidně na úplně jiný server.


Pokud budu vytvářet seo uris už za běhu webu, vytvořím dvě opačná pravidla - index.php?id=123456 přesměruji s R na 13246.html. Pošlu u toho hlavičku "moved permanently", aby všichni věděli, že mají používat adresu s html.
A pak tam dám druhé pravidlo, které to udělá naopak, ale už bez R.

Mimochodem má oblíbené pravidlo je

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Condition říká, že se nemá přepisovat, pokud je požadavek na platný soubor.
V opačném případě zpracuje požadavek index.php, a v $_SERVER['PATH_INFO'] si lze pak zjistit, jak vypadala požadovaná cesta.
Vytvořím tak imaginární adresářovaou strukturu, vše ale jde přes jeden skript a jedno pravidlo. Pěkné na tom je, že to funguje i bez mod rewrite, jen adresa vypadá např. example.com/index.php/article/view/
Toto téma je uzamčeno. Odpověď nelze zaslat.

0