Autor Zpráva
sparky
Profil *
Zdravím, chtěl bych z url

http://domena/index.php?content=foto&galerie=nejaka_galerie

udělat

http://domena/galerie/nejaka_galerie

zkouším to přes htaccess a bohužel se nedaří

RewriteEngine On
RewriteBase /ryzab_new
RewriteCond %{QUERY_STRING} ^content=([^&]+)$
RewriteRule ^index\.php$ %1.html? [R=301,L,NE]
RewriteRule ^([^/]+)\.html index.php?rw=1&content=$1 [L,QSA]                   
RewriteRule ^galerie/([^/]*)\.html$ /index.php?content=foto&galerie=$1 [L,QSA]
Taps
Profil
sparky:
zkus níže uvedené
RewriteEngine On
#pokud je to zanorene v nejakem adresari, uvedte ho za /
RewriteBase /ryzab_new
#ignoruj vsechny opravdove adresare
RewriteCond %{REQUEST_FILENAME} !-d
#ignoruj vsechy opravdove soubory (php skripty, obrazky, styly)
RewriteCond %{REQUEST_FILENAME} !-f
#vsechno ostatni necha vygenerovat index.php (ten se musi rozhodnout podle promenne url, zda stranka existuje a jaky ma mit obsah)
RewriteRule ^galerie/(.*)$ /index.php?content=foto&galerie=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?rw=1&content=$1 [L,QSA]   
sparky
Profil *
Taps:
s těmito pravidly to nejde vůbec
Taps
Profil
sparky:
v jakých tvarech máš napsané odkazy ?
sparky
Profil *
tak jak je to uvedeno v url, tedy:

<a href="index.php?content=foto&galerie=nejaka_galerie">
Kajman
Profil
sparky:

V první řadě si musíte opravit odkazy generované stránky na
<a href="/ryzab_new/galerie/nejaka_galerie">

Pak by měly fungovat pravidla z [#2] bez řádku 10.
sparky
Profil *
a bude mi to fungovat, když si GETem posilam content a nazev galerie?
Taps
Profil
sparky:
Ano, nejlepší je to zkusit :-)
sparky
Profil *
zkusil jsem to a nefunguje

Jen jestli jsem to pochopil dobře, tam kde mám:

<a href='index.php?content=foto&amp;galerie={$value5[$i]['galerie']}' title='{$value5[$i]['title']}'>{$value5[$i]['nazev']}</a>

mám napsat

<a href='/ryzab_new/galerie/{$value5[$i]['galerie']} title='{$value5[$i]['title']}'>{$value5[$i]['nazev']}</a>
Taps
Profil
sparky:
Ano
sparky
Profil *
Taps
tak takhle mi to nefunguje

Když to takto přepíšu, tak jak se tam posílá content a galerie? to má zajistit ten rewrite? Teď nechápu, jak by to mělo fungovat.
Taps
Profil
sparky:
zkus to ještě takto:
<a href='galerie/{$value5[$i]['galerie']} title='{$value5[$i]['title']}'>{$value5[$i]['nazev']}</a>
sparky
Profil *
Taps:
to taky nepomáhá
Davex
Profil
sparky:
tak takhle mi to nefunguje
Možná by bylo dobré, kdybys popsal, jak se to nefungování projevuje a co by se mělo dít, kdyby to fungovalo.

to má zajistit ten rewrite?
Přepis adres pomocí mod_rewrite funguje tak, že webserver přepisuje požadovanou adresu, kterou dostane od prohlížeče, na nějakou jinou. Na HTML kód stránky ani do PHP skriptu se nesahá.
Taps
Profil
sparky:
nebude na škodu, když si projdeš následující odkaz: Mod_rewrite
sparky
Profil *
Davex:
chtěl bych docílit toho aby se mi z url

http://www.domena.cz/index.php?content=foto&galerie=nejaka_galerie

zobrazovala

http://www.domena.cz/galerie/nejaka_galerie

zajímalo by mne, jestli to jde udělat pomocí mod_rewrite nebo, jestli ještě musím předělat odkazy
Taps
Profil
sparky:
Je nutné rovněž upravit i odkazy
sparky
Profil *
Taps:
takže to je zase jiná problematika, mohl bych požádat o nějaký vhodný odkaz, kde to nastudovat, nebo poprosit o radu, jakým směrem se ubírat, abych upravil ty odkazy?
Taps
Profil
sparky:
viz [#6] Kajman
juriad
Profil
PHP chápe odkazy ve formátu:
cesta/soubor.php?param1=hodnota1&amp;param2=hodnota2

Pokud chceš použivat pěkné odkazy
soubor/hodnota1/hodnota2
musíš nějak zajistit, aby přesto PHP dostalo požadavek ve formátu, kterému rozumí.

Z toho důvodu existuje modul rewrite do webového serveru Apache, který umožňuje zadat pravidla pro změnu adres.
Takovým pravidlem může být schématicky řečeno:
(soubor)/(hodnota1)/(hodnota2) -> cesta/(soubor).php?param1=(hodnota1)&amp;param2=(hodnota2)
Tento modul zapůsobí dříve než se požadavek dostane PHP. Ani prohlížeč ani PHP netuší, že k nějaké změně adresy dochází.

Stačí tedy zapsat pravidla a začít používat pěkné adresy.
sparky
Profil *
teď bych potřeboval trochu usměrnit, pořád mi není jasné, jak z

cesta/(soubor).php?param1=(hodnota1)&param2=(hodnota2)

udělat

(soubor)/(hodnota1)/(hodnota2)

nebo spíše nechápu, jak to bude fungovat, když budu mít v odkaze (soubor)/(hodnota1)/(hodnota2)
Taps
Profil
sparky:
hodnoty v odkaze
(soubor)/(hodnota1)/(hodnota2)
budou podstrčeny do
cesta/(soubor).php?param1=(hodnota1)¶m2=(hodnota2)

Nejlepší by bylo kdyby sis prošel odkaz v [#15] Taps
sparky
Profil *
už se mi to povedlo a ještě bych se chtěl zeptat proč nefunguje toto

RewriteEngine On
RewriteBase /ryzab_new
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^galerie/(.*)$ /index.php?content=foto&galerie=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?rw=1&content=$1 [L,QSA]

je to tím, že tam jsou 2 pravidla?
Kajman
Profil
sparky:

Dojde postupně ke dvojímu přepsání, kdy na konci bude intetní adresa
index.php?rw=1&content=index.php

Podmínky RewriteCond patří jen k následujícímu pravidlu RewriteRule. Zkuste podmínky z 3. a 4. řádku dát i mezi 5. a 6., pokud to poslední pravidlo potřebujete také.
sparky
Profil *
Kajman:
to už jsem zkoušel, dát tam znova ty podmínky a nefungovalo to
Davex
Profil
sparky:
Nechal bych tam jen to první pravidlo bez úvodního lomítka v přepsané adrese, protože to je nahrazeno cestou v RewriteBase.

RewriteEngine On
RewriteBase /ryzab_new

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^galerie/(.*)$ index.php?content=foto&galerie=$1 [L,QSA]
sparky
Profil *
Davex:
to rewriteBase je tam jen na localu, na serveru je pouze lomitko
RewriteBase /
sparky
Profil *
už je vše funkční, děkuji za rady

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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