Autor Zpráva
Pavel444
Profil
Dobrý den,

pročítal jsem si na diskusi nějaké témata ohledně nastavení pěkných url. Chápu, že se to tady dost opakuje, nicméně já mám složitější dotaz:

V současné době mám toho (viz. skript). Zajišťuje mi to přesměrovani z www.domena.cz/kontakt.php na www.domena.cz/kontakt. Dělá mi to u všech stránek, ale já bych chtěl zařídit výjimku.

Potřebuji, aby to neprovádělo u stránky clanky.php -> tady na diskusi jsem totiž našel následující skript (2), který bych pod původní umístil. Pomocí PHP (skript 3) pak jen dohledám článek z databáze.
Cílem tedy je: všechny stránky na webu přesměrovávat na verzi bez .php + zajistit, aby při zadání www.domena.cz/clanky/1-prvni-clanecek se prováděl skript clanky.php?url=1-prvni-clanecek.

Moc díky za všechny rady, fakt!
RewriteEngine on

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

Skript 2
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?prom1=$1
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ ?prom1=$1&prom2=$2


if($prom1=='clanky') {
    $dotaz = "SELECT * FROM clanky WHERE `nazev_url`='".$prom2."'";
    } 
Kajman
Profil
Mezi 4. a 5. řádek přidáte

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ $1.php?url=$2 [L,QSA]
Pavel444
Profil
Kajman:

Pokud dám do .htaccess toto, stejně to nejde.

RewriteEngine on
 
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ $1.php?url=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?prom1=$1
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ ?prom1=$1&prom2=$2
Kajman
Profil
To jste dosud měl tuto splácaninu obou kódů z [#1] nebo jen ten první?
Pavel444
Profil
Kajman:
Doposud jsem měl na serveru jen:

RewriteEngine on
 
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]



Lze to napsat lépe? Já totiž moc nevím...
Kajman
Profil
Mezi řádky 4 a 5 z kódu v [#5] zkuste přidat kód z [#2]. Pak po zadání
www.domena.cz/clanky/1-prvni-clanecek
by se měl zavolat skript clanky.php a v $_GET['url'] by mělo být 1-prvni-clanecek

Pokud tomu tak nebude, zkuste blíže prozkoumat, co se děje a co ne.
Pavel444
Profil
Kajman:
Vše funguje. Pořád jsem tam cpal to $_GET["prom1"].

Mockrát vám děkuji,
pěkný večer.


Kajman:
Jen ještě dotaz: lze nějak ošetřit, aby pokud někdo zadá www.domena.cz/hahaha/1-prvni-clanecek se zobrazil Internal server error nebo jiné serverové hlášení? Nebo musím nějak ošetřit přes php?
Kajman
Profil
Pokud neexistuje hahaha.php, měla by se zobrazit 404 stránka.

Pokud to přepisování s dvěma parametry nechcete univerzálně, ale jen pro vyjmenované skripty, lze to pravidlo upravit na.
RewriteRule ^(clanky)/([^/]+)?/?$ $1.php?url=$2 [L,QSA]
Případně časem rozšířit na
RewriteRule ^(clanky|fotky|novinky)/([^/]+)?/?$ $1.php?url=$2 [L,QSA]

I v tomto případě by se pak při neplatné adrese měl vrátit obsah 404 stránky, kterou si můžete upravit a pokud ji budete generovat php, můžete ještě změnit chybový kód z 404 na něco jiného.

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